2014-06-25 103 views
0

我的json數據如下。使用LINQ解析JSON

{ 
    "data":{ 
     "foo":{ 
     "sfoo":"1", 
     "active":1 
     }, 
     "foo":{ 
     "sfoo":"2", 
     "active":0 
     }, 
     "v":"v1" 
    } 
} 

我嘗試用這個代碼從JSON值:

JObject _JObject = JObject.Parse(_JsonString); 

var _JItems = _JObject.SelectToken("data[0].foo") 
      .Select(s => new 
      { 
       _Sfoo = (string)s.SelectToken("sfoo"), 
       _WhereClause = (string)s.SelectToken("active") 
      }) 
    .Where(w => w._WhereClause == "1"); 

foreach (var _JItem in _JItems) 
{ 
    MessageBox.Show(_JItem._Sfoo.ToString()); 
} 

我正在一個錯誤,如「其他信息:值不能爲空。」

預先感謝您。

+2

'data'不是一個數組,並且* object *'data'的第一個'foo'屬性將被第二個'foo'屬性覆蓋。也許你打算讓'data'成爲一個數組? –

回答

1

正如我評論,data對象{}),而不是一個陣列([])。你看到一個錯誤,因爲對象data沒有屬性0定義。

好像你會希望你的JSON到這個樣子,而不是:

{ 
    "data":{ 
     "foo":[ 
     { 
      "sfoo":"1", 
      "active":1 
     }, 
     { 
      "sfoo":"2", 
      "active":0 
     } 
     ], 
     "v":"v1" 
    } 
} 

然後你解析代碼應該是這樣的:

var _JItems = _JObject.SelectToken("data.foo") 
     .Select(s => new 
     { 
      _Sfoo = (string)s.SelectToken("sfoo"), 
      _WhereClause = (string)s.SelectToken("active") 

     }) 
     .Where(w => w._WhereClause == "1"); 
+0

謝謝,但它似乎有效,當我檢查此網址http://jsonformatter.curiousconcept.com – Kerberos

+0

@Kerberos根據您的意圖,語法正確和正確之間存在差異。 – iamkrillin

+0

@ Kerberos:正如iamkrillin所說,你的JSON是有效的,你只是沒有正確訪問它。 –