2017-06-30 27 views
0

我想要做的是爲每個地址預測生成所有"description"List<string>,因爲其他數據不是與這個項目有關。這是我正在使用的JSON:使用JSON.NET解析JSON字符串並創建來自特定陣列成員的字符串列表

{ 
 
    "predictions" : [ 
 
     { 
 
     "description" : "123 Fake Street, Chuxiong, Yunnan, China", 
 
     "id" : "7e358b51222e27748f2edb85fdced03ce521a8d1", 
 
     "matched_substrings" : [ 
 
      { 
 
       "length" : 15, 
 
       "offset" : 0 
 
      } 
 
     ], 
 
     "place_id" : "EigxMjMgRmFrZSBTdHJlZXQsIENodXhpb25nLCBZdW5uYW4sIENoaW5h", 
 
     "reference" : "CmRWAAAAkvZoFSAdrZVT-kn39UmjrxpNLA8EHBVHD4wWk1gh-fJ9eRfYKXI3MPC-WgkSBvqjYH1y9zGJJhzkirL1gh_tdzWOCg5PxpeWJInJhrL6iJpDRYM9SE-vRrnzvwRcKmFkEhCC1kdbeGjmZzhICnOQgBeyGhRr4JloDu9qsNvfNgWnT7TjomYnMQ", 
 
     "structured_formatting" : { 
 
      "main_text" : "123 Fake Street", 
 
      "main_text_matched_substrings" : [ 
 
       { 
 
        "length" : 15, 
 
        "offset" : 0 
 
       } 
 
      ], 
 
      "secondary_text" : "Chuxiong, Yunnan, China" 
 
     }, 
 
     "terms" : [ 
 
      { 
 
       "offset" : 0, 
 
       "value" : "123 Fake Street" 
 
      }, 
 
      { 
 
       "offset" : 17, 
 
       "value" : "Chuxiong" 
 
      }, 
 
      { 
 
       "offset" : 27, 
 
       "value" : "Yunnan" 
 
      }, 
 
      { 
 
       "offset" : 35, 
 
       "value" : "China" 
 
      } 
 
     ], 
 
     "types" : [ "route", "geocode" ] 
 
     }, 
 
     { 
 
     "description" : "123 Fake Road, York, PA, United States", 
 
     "id" : "0bc5d3a9d8627eeed8da28434a65a5732470ae62", 
 
     "matched_substrings" : [ 
 
      { 
 
       "length" : 13, 
 
       "offset" : 0 
 
      } 
 
     ], 
 
     "place_id" : "EiYxMjMgRmFrZSBSb2FkLCBZb3JrLCBQQSwgVW5pdGVkIFN0YXRlcw", 
 
     "reference" : "CmRUAAAAJ2xHFZSOF_UUjGB9RI5TMFUsHWUeo2TBEjUu8lGJ9IDX-hegwwkOvsPADTet0Xqsw0IJ6tlIRByCR52rKJuGrwQ2-dBFiFqfYViJFxsUpTqcuwhyXuieBWhixBI3HdXUEhCXLWrK158AahJT9L0AARhAGhSJ6kXvCjpcQ_UOxLe_lUGddkgj9g", 
 
     "structured_formatting" : { 
 
      "main_text" : "123 Fake Road", 
 
      "main_text_matched_substrings" : [ 
 
       { 
 
        "length" : 13, 
 
        "offset" : 0 
 
       } 
 
      ], 
 
      "secondary_text" : "York, PA, United States" 
 
     }, 
 
     "terms" : [ 
 
      { 
 
       "offset" : 0, 
 
       "value" : "123 Fake Road" 
 
      }, 
 
      { 
 
       "offset" : 15, 
 
       "value" : "York" 
 
      }, 
 
      { 
 
       "offset" : 21, 
 
       "value" : "PA" 
 
      }, 
 
      { 
 
       "offset" : 25, 
 
       "value" : "United States" 
 
      } 
 
     ], 
 
     "types" : [ "route", "geocode" ] 
 
     }, 
 
     { 
 
     "description" : "123 Fake Drive, Luray, VA, United States", 
 
     "id" : "8f24aaae29e3c66d166b474078a764f67752b6b0", 
 
     "matched_substrings" : [ 
 
      { 
 
       "length" : 14, 
 
       "offset" : 0 
 
      } 
 
     ], 
 
     "place_id" : "EigxMjMgRmFrZSBEcml2ZSwgTHVyYXksIFZBLCBVbml0ZWQgU3RhdGVz", 
 
     "reference" : "CmRWAAAAo4DSwUPKoaYCbnXEVLN-XPYjwrdLeu9r5NbhMStAYXbDhRkxfl1kS_8sYA-ppwyiAj2-MpBwTy2-P3Vo8yCEAmy5JqZwBtdImKRHGwCw8fY7UFXYJO7yhaUyFE-41z25EhBU6Ne6JR94DU7zl168LyUhGhS9xQHoi_zd9AMsDfp84w8Ol5hCXQ", 
 
     "structured_formatting" : { 
 
      "main_text" : "123 Fake Drive", 
 
      "main_text_matched_substrings" : [ 
 
       { 
 
        "length" : 14, 
 
        "offset" : 0 
 
       } 
 
      ], 
 
      "secondary_text" : "Luray, VA, United States" 
 
     }, 
 
     "terms" : [ 
 
      { 
 
       "offset" : 0, 
 
       "value" : "123 Fake Drive" 
 
      }, 
 
      { 
 
       "offset" : 16, 
 
       "value" : "Luray" 
 
      }, 
 
      { 
 
       "offset" : 23, 
 
       "value" : "VA" 
 
      }, 
 
      { 
 
       "offset" : 27, 
 
       "value" : "United States" 
 
      } 
 
     ], 
 
     "types" : [ "route", "geocode" ] 
 
     }, 
 
     { 
 
     "description" : "123 Fake Lane, Orangeburg, SC, United States", 
 
     "id" : "d3d3f49c60871bac676f5872ed7d04bff3a2d737", 
 
     "matched_substrings" : [ 
 
      { 
 
       "length" : 13, 
 
       "offset" : 0 
 
      } 
 
     ], 
 
     "place_id" : "EiwxMjMgRmFrZSBMYW5lLCBPcmFuZ2VidXJnLCBTQywgVW5pdGVkIFN0YXRlcw", 
 
     "reference" : "CmRaAAAAWkmzLjcStucl1QuYHjQdip4h7zK9H6WmcnFlVR09FQf4iQSDAb04G1KHC55-ah_za5PaGNtvAf-Qh7EOrVwBcbCvhlIeje_RFJgqPM2mAqi8Joc_pufBOlOjQ8WAlAmGEhBM5xgeFZ0igc1JDxFjbmZ9GhROPsh63HGcp_baMGel8ln3WIUrjg", 
 
     "structured_formatting" : { 
 
      "main_text" : "123 Fake Lane", 
 
      "main_text_matched_substrings" : [ 
 
       { 
 
        "length" : 13, 
 
        "offset" : 0 
 
       } 
 
      ], 
 
      "secondary_text" : "Orangeburg, SC, United States" 
 
     }, 
 
     "terms" : [ 
 
      { 
 
       "offset" : 0, 
 
       "value" : "123 Fake Lane" 
 
      }, 
 
      { 
 
       "offset" : 15, 
 
       "value" : "Orangeburg" 
 
      }, 
 
      { 
 
       "offset" : 27, 
 
       "value" : "SC" 
 
      }, 
 
      { 
 
       "offset" : 31, 
 
       "value" : "United States" 
 
      } 
 
     ], 
 
     "types" : [ "route", "geocode" ] 
 
     }, 
 
     { 
 
     "description" : "123 Fake Hollow Road, York, PA, United States", 
 
     "id" : "4211cef659a1322f42e85183cb41e75d2b6ae65a", 
 
     "matched_substrings" : [ 
 
      { 
 
       "length" : 20, 
 
       "offset" : 0 
 
      } 
 
     ], 
 
     "place_id" : "Ei0xMjMgRmFrZSBIb2xsb3cgUm9hZCwgWW9yaywgUEEsIFVuaXRlZCBTdGF0ZXM", 
 
     "reference" : "CmRbAAAAOVlDirZh2WjzSXj28VM2peJHG9rTiQ57hqtTr94dCLAQezuZJJT4dqFC8B9TFyddBfhDDMrbSwZro9RkLkvLzxb95XHtzfb1ZnlCNVfK9_K4rEHHwcQ7Ndd3l8x5GNXGEhBDc6mw6iyjYcOVZo44mLwvGhSNaBwDy9OgIAyNa8_gvSyQ3bC3cQ", 
 
     "structured_formatting" : { 
 
      "main_text" : "123 Fake Hollow Road", 
 
      "main_text_matched_substrings" : [ 
 
       { 
 
        "length" : 20, 
 
        "offset" : 0 
 
       } 
 
      ], 
 
      "secondary_text" : "York, PA, United States" 
 
     }, 
 
     "terms" : [ 
 
      { 
 
       "offset" : 0, 
 
       "value" : "123 Fake Hollow Road" 
 
      }, 
 
      { 
 
       "offset" : 22, 
 
       "value" : "York" 
 
      }, 
 
      { 
 
       "offset" : 28, 
 
       "value" : "PA" 
 
      }, 
 
      { 
 
       "offset" : 32, 
 
       "value" : "United States" 
 
      } 
 
     ], 
 
     "types" : [ "route", "geocode" ] 
 
     } 
 
    ], 
 
    "status" : "OK" 
 
}

This is the most relevant documentation I can find,但是當我使用此代碼嘗試同樣的方法,

DataSet pleaseWork = JsonConvert.DeserializeObject<DataSet>(thisIsMyJsonString); 
DataTable pleaseWorkAgain = pleaseWork.Tables["predictions"]; 

這是我的錯誤:

Newtonsoft.Json.JsonSerializationException:'Unexpected JSON token wh閱讀DataTable:StartObject。路徑'預測[0] .structured_formatting'

我認爲這是因爲該示例的JSON沒有像我正在使用的那樣深嵌套,但我不完全確定。

回答

0

下面應該適合你。

List<String> addressList = new List<string>(); 
dynamic pleaseWork = JsonConvert.DeserializeObject(thisIsMyJsonString); 
foreach (var obj in pleaseWork.predictions) 
{ 
    addressList.Add(obj.description.Value); 
} 
+0

完美地工作。感謝堆。 – SuperDicko

0

您可以使用Linq查詢它;

JObject root = JObject.Parse(thisIsMyJsonString); 
List<String> descriptions = (from p in root["predictions"] //for every item in predictions 
          select (string)p["description"] //select its description 
          ).ToList();