遍历JSON响应Newtonsoft.Json.Linq.JObject C#

sys73r

我不想创建一个类来反序列化响应,因为将来它可能会有所不同。

我尝试了几种尝试访问所需数据的方法,但我真的不知道如何访问json响应中的项目。

obj {{
  "type": "regular",
  "response": {
    "usable": [
      {
        "id": "897",
        "name": "John Doe",
        "owner": {
          "id": "2",
          "username": "jdoe",
          "firstname": "john",
          "lastname": "doe"
        }
      },
      {
        "id": "657",
        "name": "Karen Whiner",
        "owner": {
          "id": "3",
          "username": "kwhiner",
          "firstname": "karen",
          "lastname": "whiner"
        }
      },
  },
  "error_code": 0,
  "error_msg": "",
  "warnings": [],
  "timestamp": 74772822
}}

我需要的:

Console.WriteLine:

ID:
897-名称:john doe-用户名:jdoe ID:657-名称:Karen Whiner-用户名:kwhiner

等等

我尝试过的

var jsonString = await result.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeObject<object>(jsonString);


DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(jsonString);
DataTable dataTable = dataSet.Tables["response"];

foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine(row["id"] + " - " + row["name"]);
}

---


JObject stuff = JObject.Parse(jsonString);

foreach (JProperty rate in stuff)
{
    Console.WriteLine(rate.Name + ": " + rate.Value);
}


有什么建议?

谢谢

贾瓦德

首先,您发布的json是不正确的..但是我假设它与复制/粘贴和berevity有关。

您有不同的选择,但是如果要进行动态/对象反序列化,则可以执行此操作以打印其中一行。

var obj = JsonConvert.DeserializeObject<dynamic>(text);
var usableList = obj["response"]["usable"];
Console.WriteLine($"id: {usableList[0]["id"]} - name: {usableList[0]["name"]} - username: {usableList[0]["owner"]["username"]}");

//prints
id: 897 - name: John Doe - username: jdoe

我建议创建一个类来反序列化json。这样,您可以使用Linq和for循环遍历所有可用列表。

public class Rootobject
{
    public string type { get; set; }
    public Response response { get; set; }
    public int error_code { get; set; }
    public string error_msg { get; set; }
    public object[] warnings { get; set; }
    public int timestamp { get; set; }
}

public class Response
{
    public Usable[] usable { get; set; }
}

public class Usable
{
    public string id { get; set; }
    public string name { get; set; }
    public Owner owner { get; set; }
}

public class Owner
{
    public string id { get; set; }
    public string username { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
}

// and deserialization and printing would be like this,

var obj = JsonConvert.DeserializeObject<Rootobject>(text);
foreach (var item in obj.response.usable)
{
    Console.WriteLine($"id: {item.id} - name: {item.name} - userid: {item.owner.username}");
}

// prints:
id: 897 - name: John Doe - userid: jdoe
id: 657 - name: Karen Whiner - userid: kwhiner

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Newtonsoft.Json.Linq.JArray到字符串数组C#

使用JObject即时创建JSON

无法将类型为“ Newtonsoft.Json.Linq.JObject”的对象转换为类型为“ Newtonsoft.Json.Linq.JArray”的对象

Newtonsoft从JSON路径更新JObject吗?

无法将类型为'Newtonsoft.Json.Linq.JObject'的对象强制转换为<MyClass>

无法将类型“ Newtonsoft.Json.Linq.JObject”转换为复杂类型

Newtonsoft.Json.Linq.JObject.ToObject()以字符串格式转换日期

如何使Newtonsoft.Json.Linq.JObject不可变?

无法访问Newtonsoft.Json.Linq.JProperty上的子值-使用LinQ检查JObject时发生错误

从JSON检索项目时,获取“无法将Newtonsoft.Json.Linq.JObject转换为Newtonsoft.Json.Linq.JToken”

使用SelectTokens查询JSON?使用C#中的Newtonsoft.Json.Linq

NewtonSoft JSON将JObject添加到JObject

使用动态数据显式转换Newtonsoft.Json.Linq.JObject时出错

使用C#或Jobject或NewtonSoft连接2个JSON字符串

如何将字符串转换为Newtonsoft.Json.Linq.JObject

将Newtonsoft.Json.JsonConvert.DeserializeObject转换为Newtonsoft.Json.Linq.JObject问题

枚举NewtonSoft.Json的JObject.Json在C#中丢失了'\'字符

Json.NET将linq结果转换为IEnumerable <JObject>

用JObject解析JSON

无法将类型'Newtonsoft.Json.Linq.JObject'隐式转换为'System.Collections.Generic.IEnumerable <Employee>'

C#遍历JSON

在C#上从LINQ获取JSON数组

获取错误无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“Newtonsoft.Json.Linq.JArray”

在 C# 中使用 JObject 解析键值的 Json 键/值

C# linq groupby 包括 json

不支持集合类型“Newtonsoft.Json.Linq.JObject”

无法将 Newtonsoft.Json.Linq.JObject 转换为 Newtonsoft.Json.Linq.JToken

Microsoft Graph SDK C# Newtonsoft.Json:从 JsonReader 读取 JObject 时出错

如何将 Newtonsoft.Json.Linq.JObject 转换为复杂类型?