繁体   English   中英

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

[英]Parse JSON string using JSON.NET and create a list of strings from a specific array member

我正在尝试做的是为每个地址预测创建所有"description"List<string> ,因为其他数据与该项目无关。 这是我正在使用的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" } 

这是我可以找到的最相关的文档 ,但是当我使用此代码尝试相同的方法时,

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

这是我得到的错误:

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

我认为发生这种情况是因为示例的JSON嵌套的深度不如我正在使用的JSON嵌套,但是我不确定。

以下应为您工作。

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

您可以使用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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM