2

Anyone know what type of JSON (if even that!) the following code is? I'm retrieving this from the HTML of a website. I'm trying to parse it in C# with a JSON parser, but I'm having to do lots of preparatory editing to format it as 'valid' JSON according to JSONLint. For example, the names of the variables should all have double quotes rather than having no quotes at all.

{
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
}

This will always have the same format and I'd love to just parse it straight to an object in C# or java.

3 Answers3

4

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"]);
L.B
  • 114,136
  • 19
  • 178
  • 224
1

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 );
ThinkingStiff
  • 64,767
  • 30
  • 146
  • 239
1

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.

BRPocock
  • 13,638
  • 3
  • 31
  • 50
  • I just ran it through Perl on my laptop; but it's meant to simply enquote the "key" values -- you probably (in C#) would do something where you pass the two {}-expressions into a "search" and "replace" method ... without the braces. (My phone can't type the caret or backslash, but copy from caret to : and possibly add extra backslashes before the backslashes and double quotes) – BRPocock Dec 29 '11 at 02:56
  • Now that I'm in front of a real keyboard, I believe the C# syntax would be `Regex.Replace (json_string, "^\\s*([a-z0-9_]+)\\:", "\"${l}\"");` (using `` as a named tag for “label” and `${l}` rather than `\1` to refer back to it) – BRPocock Dec 29 '11 at 15:10