【问题标题】:How to extract data from this JSON format?如何从这种 JSON 格式中提取数据?
【发布时间】:2018-07-11 22:13:43
【问题描述】:

我有一个 JSON 文档,我正在尝试从这个 JSON 文档中提取单个数据。但是,当我尝试提取时,我得到的只是一些不在文档中的数字。

这是文件:

user: [{
     serialNo: 1,
     details: [{ name: "John",
             job: "Receptionist" }]
 },
 {
     serialNo: 2,
     details: [{
             name: "Alan",
             job: "Salesman"
          }]
  }
]

所以我尝试这样做以提取名称“Alan”

using (var response = (HttpWebResponse)request.GetResponse())
{
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        var js = new JavaScriptSerializer();
        var objText = reader.ReadToEnd();
        var data = objText[1][0].name;
    }
}

它返回给我的只是一些没有意义的数字,例如“123”或“467”等。

【问题讨论】:

  • @Arana 你为什么不能点击这个链接stackoverflow.com/questions/24233104/…
  • 将您的 json 转换为 c# 并且易于提取。
  • 看看JSON.Net,然后做成POCO
  • @vishuminhas 我试过var data= (string)obj["user"]["serialNo"]; 但它会提示错误。它说[ ] 需要在 int 中。
  • 您的 json 似乎无效,请提供正确的 json

标签: c# asp.net json


【解决方案1】:

查看Json.NET - Newtonsoft。它也是一个可以通过 NuGet 找到的包,只需输入 Newtonsoft :)。

然后你可以像这样制作模型:

第一个解决方案:

using Newtonsoft.Json;
using System;

namespace UsersJSON
{

    public class UsersRepository
    {
        public User[] Users;
    }

    public class User
    {
        public int serialNo;
        public string[] details;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var json = @"{
  users: [
  {
    serialNo: 1,
    details: ['John', 'Receptionist']
  },
  {
    serialNo: 2,
    details: ['Alan', 'Salesman']
  }]
}";
            var usersList = JsonConvert.DeserializeObject<UsersRepository>(json);
            Console.WriteLine(usersList.Users[0].details[0]); // prints "John"
            Console.ReadLine();
        }
    }
}

第二种解决方案:

using Newtonsoft.Json;
using System;

namespace UsersJSON
{

    public class UsersRepository
    {
        public User[] Users;
    }

    public class User
    {
        public int serialNo;
        public UserDetails details;
    }

    public class UserDetails
    {
        public string name;
        public string job;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var json = @"{
  users: [
  {
    serialNo: 1,
    details: {name: 'John', job: 'Receptionist'}
  },
  {
    serialNo: 2,
    details: {name: 'Alan', job:'Salesman'}
  }]
}";
            var usersList = JsonConvert.DeserializeObject<UsersRepository>(json);
            Console.WriteLine(usersList.Users[0].details.name); // prints "John"
            Console.ReadLine();
        }
    }
}

两者都要求您稍微更改 JSON 输出。

【讨论】:

  • 嗨,非常感谢您提供的代码。但是,当我尝试这样做时,我在var usersList 部分进行了调试,我从中得到了一个空值。
  • 我最初发布的代码未经测试,但我已经回去查看代码,并让它工作,但我要求我将你的 JSON 更改为你提供的字符串实际上是无效的。如果您查看我现在编辑的解决方案,您将能够看到有效的 JSON 是什么样的 :)
  • 如果你想让 name: 和 job: 作为访问器,你需要使用 { name: "name" , job: "job" } 符号而不是 [] 因为 []表示法适用于数组而不是对象,您不能使用 : 来定义 JSON 中数组项的访问器。您可以使用此链接jsonviewer.stack.hu 查看您的 JSON 是否有效
  • 我已经在您提供的 jsonviewer 上试用了我的 JSON 的 RAW 行。它可以被格式化。但是我不确定为什么在我的代码中,尽管我遵循了确切的步骤,但我得到了 null .. 嗯
  • 所以我使用了您提供的 json 并在开头放了一个 { 并在结尾放了一个 } 以查看查看器是否对其进行了格式化,但是,Json.NET 希望看到花括号“ { }" 而不是正方形的 "[ ]" 当里面有名字时,比如 name:"value"。我可以再次编辑我的代码,这样您就可以看到构建 JSON 的替代方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多