使用JSON.NET解析JSON字符串,并创建特定数组成员的字符串列表

时间:2017-06-30 03:30:24

标签: c# arrays json json-deserialization

我要做的是为每个地址预测生成所有List<string>的{​​{1}},因为其他数据与此项目无关。这是我正在使用的JSON:

"description"

This is the most relevant documentation I can find,但是当我尝试使用此代码的相同方法时,

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

这是我得到的错误:

  

Newtonsoft.Json.JsonSerializationException:'读取DataTable时出现意外的JSON令牌:StartObject。路径'预测[0] .structured_formatting'

我认为这是因为示例的JSON没有像我正在使用的那样嵌套,但我不完全确定。

2 个答案:

答案 0 :(得分:0)

以下内容适合您。

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

答案 1 :(得分: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();