【问题标题】:How can i get all values of JSON array如何获取 JSON 数组的所有值
【发布时间】:2020-01-18 05:48:09
【问题描述】:

我有这个 JSON 响应:

{
    "post_parameters_error_flag": false,
    "data_error_flag": false,
    "row_count": 7,
    "message": "Operazione completata.",
    "title": [
        "title0",
        "title1",
        "title2",
        "title3",
        "title4",
        "title5",
        "title6"
    ],
    "data": [
        "value0",
        "value1",
        "value2",
        "value3",
        "value4",
        "value5",
        "value6",
        "value7"
    ]
}

我需要将所有从“数据”数组中获得的值写入一个列表(例如),但我不知道如何从响应中获取数据:

string URL = "myurl";
string Params = string.Format("hwid={0}&building={1}", Utils.UUID(), "test");

Request HTTPRequest = new Request();

JObject JSONObject = JObject.Parse(await HTTPRequest.PostAsyncResponse(URL, Params));

//now? what can i do

有什么解决办法吗?

【问题讨论】:

  • 既然已经有一个完全有效的答案,我想让你知道有一个用于 JSON 的 NuGet 包,称为 Newtonsoft,它使 JSON 的序列化和反序列化相对容易。这可能值得研究。

标签: c# arrays json list response


【解决方案1】:

你可以这样使用:

var result = await HTTPRequest.PostAsyncResponse(URL, Params)
var token = JToken.Parse(result);
var data= token.Value<JArray>("data");

或者你也可以使用JsonPath:

var result = await HTTPRequest.PostAsyncResponse(URL, Params)
var token = JToken.Parse(result);
var data = token.SelectTokens("$.data[*]");

但实际上,您应该序列化为一个对象,然后使用属性来获取数据(或其他属性):

public class RootObject
{
    public bool post_parameters_error_flag { get; set; }
    public bool data_error_flag { get; set; }
    public int row_count { get; set; }
    public string message { get; set; }
    public List<string> title { get; set; }
    public List<string> data { get; set; }
}

var result = await HTTPRequest.PostAsyncResponse(URL, Params)
var item = JsonConvert.DeserializeObject<RootObject>(result);
var data = item.data;

【讨论】:

  • 谢谢,我通过将数据序列化为一个对象并从属性中访问它来解决
【解决方案2】:

试试这个,

var data = JObject.Parse(await HTTPRequest.PostAsyncResponse(URL, Params))["data"]

var jsonObject = (JObject)JsonConvert.DeserializeObject(await HTTPRequest.PostAsyncResponse(URL, Params));
var data = (JObject)(jsonObject.Property("data").Value);

【讨论】:

  • 谢谢,我已经按照@andyb952的解决方案解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多