解析非标准 JSON

Parsing non-standard JSON

本文关键字:JSON 非标准      更新时间:2023-09-26

有人知道下面的代码是什么类型的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.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"]);

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 );
无论是否

(我投票"不"(它是否有效:

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

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