【问题标题】:Confusion in fetching data from JSON从 JSON 中获取数据的困惑
【发布时间】:2012-02-02 09:56:37
【问题描述】:

我正在尝试使用一种以 json 格式返回所需数据的 Web 服务。现在真正的重点是我可以从字符串中的特定 Web 服务 url 获取数据。

  string url= @"http://api.oodle.com/api/v2/listings?key=TEST&region=chicago&category=vehicle&format=json";

  string jsonString = new WebClient().DownloadString(url);

现在的重点是我以字符串(JSON 格式)获取数据。但我不知道如何将字符串转换为 JSON 字符串以及如何从该字符串中获取数据。

让我举个例子让你很容易理解

如果我的 jsonString 是这样的

{
   "current":{
      "region":{
         "id":"chicago",
         "name":"Chicago"
      },
      "category":{
         "id":"vehicle",
         "name":"Cars & Vehicles",
         "abbrev":"Vehicles"
      },
      "start":1,
      "num":10
   }
}

如何从该字符串中获取 region_name ?希望你能理解我 !尝试使用Test Link

【问题讨论】:

标签: c# asp.net json


【解决方案1】:

添加对 System.Web 的引用,然后添加到您的 using 部分

using System.Web.Script.Serialization;

然后(使用您的示例 json 字符串)

string jsonString = "{\"current\":{\"region\":{\"id\":\"chicago\",\"name\":\"Chicago\"},\"category\":{\"id\":\"vehicle\",\"name\":\"Cars & Vehicles\",\"abbrev\":\"Vehicles\"},\"start\":1, \"num\":10}}";

JavaScriptSerializer serializer = new JavaScriptSerializer();

CurrentRecord currentRecord = serializer.Deserialize<CurrentRecord>(jsonString);

string regionName = currentRecord.current.region.name;

还将以下类添加到您的项目中:

[Serializable]
public class CurrentRecord
{
    public current current;
}

[Serializable]
public class current
{
    public region region;
    public category category;
    public int start;
    public int num;
}

[Serializable]
public class region
{
    public string id;
    public string name;
}

[Serializable]
public class category
{
    public string id;
    public string name;
    public string abbrev;
}

【讨论】:

  • 或者您可以使用一些 3rd-party JSON 库,例如 JSON.Net。
  • JSON.net 非常漂亮,但在这个问题上使用 System.Web.Script.Serialization。
  • @NicholasMurray 我试过了!圆满成功!谢谢 !但是我有一个疑问,是否有必要将您的班级声明为Serializable?因为我尝试过不使用Serializable,但它仍然可以正常工作!那么声明Serializable的目的是什么?
  • @NoOne - 这取决于您对对象执行的操作 - 如果您将其传递到另一个应用程序域,您需要将其标记为可序列化,以便可以反序列化,如果您在您没有的相同应用程序域。这是因为对象仅在创建它们的应用程序域中有效。 msdn.microsoft.com/en-us/library/ms973893.aspx
  • 我认为这意味着更多的是,如果您将流或服务中的对象传递给另一个应用程序,而不是对 dll 的引用
【解决方案2】:

您是用 Java 还是 JavaScript 处理 JSON 返回字符串?

如果您在 Java 中处理 JSON 响应字符串,则可以使用 GSON。这是一个向您展示如何操作的教程:Parsing a JSON String into an object with GSON easily

对于您的情况,您需要一个类似的类:

class Current{
  private Region region;
  private Category category;
  private int start;
  private int num;

  // getters and setters

  class Region{
    private String id;
    private String name;

    // getters and setters
  }

  class Category{
    private String id;
    private String name;
    private String abbreviation;

    // getters and setters
  }
}

否则,如果您在 Javascript 中处理这个 JSON 响应字符串,那么您可以看看这个:http://www.json.org/js.html

alert(jsonReturnString.current.region.name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多