【问题标题】:Parse JSON with org.json [duplicate]用 org.json 解析 JSON [重复]
【发布时间】:2011-09-20 12:06:18
【问题描述】:

我正在尝试解析来自服务器的输出,如下所示:

{
  "GetFolderFilesByZoneResult": [
    {
      "ID": 98748,
      "CreatedBy": "",
      "UpdatedBy": "none",
      "CreatedDate": "\/Date(1308273033620+0100)\/",
      "UpdatedDate": "\/Date(1308303003770+0100)\/",  
      "CommentCount": 0,
      "Key": "",
      "Enabled": true,
      "MimeType": "video",
      "Votes": 2,
      "TotalRating": 0,
      "AllowComments": true,
      "ViewCount": 323,
      "ReleaseDate": "\/Date(1308273000000+0100)\/",
      "ExpireDate": "\/Date(4102444800000+0000)\/",
      "Author": "",
      "Size": 133799936,
      "Tag1": "",
      "Tag2": "",
      "Tag3": "",
      "RecycleBin": false
    },
    {
      "ID": 99107,
      "CreatedBy": "",
      "UpdatedBy": "none",
      "CreatedDate": "\/Date(1308583412520+0100)\/",
      "UpdatedDate": "\/Date(1308583564007+0100)\/",     
      "CommentCount": 0,
      "Key": "",
      "Enabled": true,
      "MimeType": "video",
      "Votes": 0,
      "TotalRating": 0,
      "AllowComments": true,
      "ViewCount": 33,
      "ReleaseDate": "\/Date(1308583380000+0100)\/",
      "ExpireDate": "\/Date(4102444800000+0000)\/",
      "Author": "",
      "Size": 47955968,
      "Tag1": "",
      "Tag2": "",
      "Tag3": "",
      "RecycleBin": false
    }
  ]
}

我正在尝试使用 Java org.json 来解析它,但我对 JSON/org.json 没有任何经验,所以我遇到了一些麻烦。我该如何解析这个?

【问题讨论】:

  • 从 JSON 输入解析数据后,您打算如何在 Java 代码中使用它?您是在尝试填充自定义 Java 数据结构,还是只想从 JSON 中快速检索一两个值并继续前进?

标签: java json org.json


【解决方案1】:

1) 假设您的路径上有 JSON 库(来自 www.json.org),这很容易。

import org.json.JSONTokener;
...

URI uri = new URI("http://someserver/data.json");
JSONTokener tokener = new JSONTokener(uri.toURL().openStream());
JSONObject root = new JSONObject(tokener);

从那里,您可以处理 JSON 对象的各个部分。查看 Javadocs 以了解详细信息。 https://developer.android.com/reference/org/json/package-summary.html

【讨论】:

  • 因此我在最后一行收到以下错误:线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码 - 错误的 ctor sym 类型:
  • 您可以发布您遇到问题的代码吗?
  • 使用您发布的确切代码,唯一的区别是使用的网址
  • 以上代码可能会抛出异常,你是否适当地捕捉或处理了异常?
【解决方案2】:

这是最通用的解决方案,它允许将任何 JSON 类型解析为适当的 Java 类型:

Object json = new JSONTokener(response).nextValue();

然后您可以确定结果类型并适当地处理它。

【讨论】:

    【解决方案3】:

    我会通过的

    map<String, Object> 
    

    加载

    map<String, Object> 
    

    在对象字段中。

    基本上是在大地图中重新创建 Java 类的层次结构。

    例子:

    return ( Map<"GetFolderFilesByZoneResult", Map<"Result1", (object by id 98748) | "Result2", (object by id 99107) | "Result3", etc.
    

    JSON 将返回非常相似的大地图,并且以编程方式执行比列表更容易。

    【讨论】:

    • 我明白了,但是如何使用 org.json 解析对象/数组/值?你能提供一些代码吗?
    • 它会自动完成。将其推入一个对象并对其进行解码。例如,在我的地图示例中,它将对象变量“String ID = 99107”字段解码为 JSON 作为“ID:99107”。
    • 我认为问题正好相反,取一个 json 内容并在 java 对象中获取它的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多