2011-12-28 14 views
2

次のコードはどのような種類のJSON(その場合でも!)を知っていますか?私はウェブサイトのHTMLからこれを取得しています。私はJSONパーサーを使ってC#で解析しようとしていますが、JSONLintに従って、有効なJSONとしてフォーマットするための準備をたくさんする必要があります。例えば、変数の名前は、引用符を全く持たないのではなく、すべて二重引用符で囲む必要があります。非標準の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でオブジェクトにまっすぐにそれを解析してみたいです。

+5

これはJSONではなく、ネイティブJSオブジェクトです。 –

+3

誰かが独自のJSONエミッタを巻き込んだように見えて、詳細が間違っています。 – Argyle

+1

これはHTMLでもJSONでもありません。それはJavaScriptです(HTMLスクリプトタグで許可されています)。 –

答えて

1

JSONでは、すべての名前を二重引用符で囲む必要があるため、これは有効なJSONではありません。これは有効なJavascriptオブジェクトです。 JSON形式の質問はここに行くために:http://json.org/

あなたはJSONにこの変換を行いたい場所それは完全に明確ではないですが、JavaScriptで、あなたはJSONに変換するwindow.JSON.stringifyを使用することができます。

デモ: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); 
+0

解決策はありますか?たぶんこれはコメントとして良いかもしれない。 – Ryan

+0

@minitech良い点。編集されました。 – ThinkingStiff

4

あなたの入力文字列を解析するJson.Netを使用することができます。あなたも、それはだ(私は「ない」投票)

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

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"]); 
+0

@ Stalker-Downvoter、あなたの理由を説明するのに十分なのですか? –

1

かどうかは、純粋なJson.Netで(あなたの文字列を使用してテスト済み)以下のようにthis extension classの助けを借りてdynamicを利用することができます有効:

  • 文字列を読み取ります。
  • s {^\s*([a-z0-9_]+)\:} {"\1":} g

このデータセットのために働くようだ、と私は、彼らはあなたの出力だけstrcatティンだと賭けるので、それはおそらく、当分の間、安全です。

+0

私はノートパソコンでPerlを使いました。それは単に "キー"値をenquoteすることを意味しています - あなたはおそらく(C#で)2つの{} - 式を "検索"と "置換"メソッドに渡す何かを行うでしょう。 (私の電話はキャレットやバックスラッシュを入力することはできませんが、キャレットからコピーすることはできません:バックスラッシュと二重引用符の前に余分なバックスラッシュを追加することができます) – BRFennPocock

+0

私は実際のキーボードの前にいるので、 \\: "、" \ "$ {l} \" ");'(名前として ''を使用して) 'Regex.Replace(json_string、"^\\ s *( [a-z0-9 _] +) "ラベル"と '$ {l}'の代わりに '\ 1 'ではなく' 'label' – BRFennPocock

関連する問題