2011-06-22 77 views
14

我试图解析来自看起来像这样的服务器输出:我试图用Java org.json解析它JSON解析与org.json

{ 
    "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 
    } 
    ] 
} 

,但我不”没有任何JSON/org.json的经验,所以我遇到了一些麻烦。我如何解析这个?

+0

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

回答

29

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

+0

因此,我在最后一行得到以下错误:线程“main”中的异常java.lang.RuntimeException:不可编译的源代码 - 错误的ctor sym类型:

+0

您可以发布您遇到问题的代码吗? – JohnnyO

+0

使用您发布的确切代码,唯一的区别是使用的网址 –

-2

我将它传递

map<String, Object> 

装载

map<String, Object> 
在物场

基本上重新创建大型地图内的java类的层次结构。

例子:

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

JSON将返回大地图很漂亮等,编程更容易做,然后列出。

+1

我明白了,但是如何用org.json解析对象/数组/值?你能提供一些代码吗? –

+0

它自动完成它。将它推入一个对象并对其进行解码。例如,在我的地图示例中,它将对象变量“字符串ID = 99107”字段解码为JSON作为“ID:99107”。 – TravMan

+0

我认为这个问题恰恰相反,拿一个json的内容,并得到它的java对象的价值。 –

4

这里是最普遍的解决方案,它允许解析任何JSON类型到相应的Java类型:

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

然后你就可以决定所产生的类型并适当地处理它。