Разбор нестандартного JSON - PullRequest
2 голосов
/ 29 декабря 2011

Кто-нибудь знает, какой тип JSON (если даже это!) Следующий код?Я извлекаю это из HTML сайта.Я пытаюсь проанализировать его в C # с помощью синтаксического анализатора JSON, но мне нужно много подготовительного редактирования, чтобы отформатировать его как «допустимый» JSON в соответствии с JSONLint.Например, имена переменных должны иметь двойные кавычки, а не иметь кавычки вообще.

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

Ответы [ 3 ]

4 голосов
/ 29 декабря 2011

Вы можете использовать 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"]);
1 голос
/ 29 декабря 2011

Является ли (я голосую «нет»), это действительно:

  • Читать в строке;
  • s {^\s*([a-z0-9_]+)\:} {"\1":} g

, кажется,работать для этого набора данных, и я держу пари, что они просто strcat сообщают вам вывод, так что это, вероятно, в настоящее время безопасно.

1 голос
/ 29 декабря 2011

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