解析非标准JSON

任何人都知道什么类型的JSON(如果是这样!)以下代码是什么? 我正在从网站的HTML中检索这个。 我正在尝试使用JSON解析器在C#中解析它,但我必须进行大量的预备编辑,根据JSONLint将其格式化为“有效”JSON。 例如,变量的名称都应该有双引号而不是没有引号。

{ status: 'A', displayed: 'Y', start_time: '2010-11-2600: 00: 00', start_time_xls: { en: '26thofNov201000: 00am', es: '26Nov201000: 00am' }, suspend_at: '2010-11-2619: 57: 59', is_off: 'Y', score_home: '', score_away: '', bids_status: '', period_id: '', curr_period_start_time: '', score_extra_info: '', ev_id: 2257335, blurb: '', last_mkts_of_day: false, follow_hcap_mkt: 10999896 } 

这将始终具有相同的格式,我很乐意直接将其解析为C#或java中的对象。

JSON要求所有名称都是双引号,因此这不是有效的JSON。 这是一个有效的Javascript对象。 有关JSON格式的问题请访问: http : //json.org/

目前还不完全清楚你要将这种转换转换为JSON,但在Javascript中你可以使用window.JSON.stringify将其转换为JSON。

演示: http : //jsfiddle.net/ThinkingStiff/3xZD8/

 var object = { names: { en: 'VirtualMarket-2MinuteLevel', es: 'VirtualMarket-2MinuteLevel' }, status: 'A', displayed: 'Y', start_time: '2010-11-2600: 00: 00', start_time_xls: { en: '26thofNov201000: 00am', es: '26Nov201000: 00am' }, suspend_at: '2010-11-2619: 57: 59', is_off: 'Y', score_home: '', score_away: '', bids_status: '', period_id: '', curr_period_start_time: '', score_extra_info: '', ev_id: 2257335, blurb: '', last_mkts_of_day: false, follow_hcap_mkt: 10999896 }, json = window.JSON.stringify( object ); 

您可以使用Json.Net来解析输入字符串。 你甚至可以在这个扩展类的帮助下使用dynamic如下(用你的字符串测试)

 dynamic obj = JsonUtils.JsonObject.GetDynamicJsonObject(jsonstr); Console.WriteLine(obj.names.en); Console.WriteLine(obj.status); Console.WriteLine(obj.start_time_xls.en); Console.WriteLine(obj.suspend_at); 

用纯Json.Net

 JObject jObj = (JObject)JsonConvert.DeserializeObject(json3); Console.WriteLine(jObj["names"]["en"]); Console.WriteLine(jObj["status"]); Console.WriteLine(jObj["start_time_xls"]["en"]); Console.WriteLine(jObj["suspend_at"]); 

是否(我投票“不”)它是有效的:

  • 读入字符串;
  • s {^\s*([a-z0-9_]+)\:} {"\1":} g

似乎适用于这个数据集,我敢打赌,他们只是在输出你的输出,所以它暂时可能是安全的。