Parsing non-standard JSON

不羁岁月 提交于 2019-11-29 15:40:53

JSON requires that all names be in double quotes, so this is not valid JSON. This is a valid Javascript object. For JSON format questions go here: http://json.org/

It's not totally clear where you want to do this conversion to JSON, but in Javascript you can use window.JSON.stringify to convert it to JSON.

Demo: 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 );

You can use Json.Net to parse your input string. You can even make use of dynamic as below with the help of this extension class (Tested with your string)

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);

With pure 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"]);

Whether or not (I vote “not”) it's valid:

  • Read in the string;
  • s {^\s*([a-z0-9_]+)\:} {"\1":} g

seems to work for this data set, and I'll bet that they're just strcatting the output at you, so it's probably safe for the time being.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!