2013-05-18 46 views
1

我只是想知道如果任何人都可以推荐一个比org.json更好的替代方法来解码复杂的JSON字符串。作为参考,这将来自Web服务器直到Android(iOS,但这是另一个开发者的问题!)设备,它不必恢复。解码复杂的JSON字符串到各种对象

该字符串是下列性质...

{"header":"value","count":value, ..., "messages":[ 
    {"messagetype":1,"name":"value"}, 
    {"messagetype":2,"name":"value","name":value}, 
    {"messagetype":1,"name":"value"}, 
    {"messagetype":3,"name":"value","subvalues":["value",value,value]}, 
    ... 
    {"messagetype":4,"name":value,"name":"value","name":value} 
]} 

基本上,有一些报头字段,我可以永远依靠但这时会出现一个消息“阵列”,变量计数,内容和顺序。

我一直在研究这几天,现在已经驳回GSON和其他一些人,因为这要么事先知道确切的结构和/或不能很好地处理嵌入的类型(包含的消息)。

回答三个this question向我指出使用org.json library,我知道我可以使用通过字符串解析,但我想这个问题的答案的答复(” 这是超级老学校,没有人使用该库了在现实中的一个世界“)让我质疑我的做法。

任何人都可以提出一个图书馆/方法可以更好地处理这个问题吗?如果其他人已经使用另一种方法来处理这种复杂和可变的结构类型,我会非常感激你的意见。

在此先感谢。

+0

你的消息行上是否有这些错别字? '{“messagetype”:2,“name”:“value”,“name”:value}'无效JSON(不能有重复键,不能有非分隔字符串文字)。其实,你的整个JSON例子都是乱七八糟的语法。 – Perception

+0

该示例是传达结构的近似值,而不是有关数据的确切示例,因此“具有以下性质” – Mike

+1

Android附带三个嵌入式JSON库。我会建议看看[Gson](https://code.google。com/p/google-gson /),因为它不仅可以做你认为它不会做的事,它还提供了许多你最终需要的功能(尽管你现在不认为你会这么做)。对于手动解析,请从[JsonParser](http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html?com/google/gson/JsonParser.html)课程开始。 – Perception

回答

1

我真的不约org.json libray的意见一致:“这是超级老学校,没有人使用该库了在现实世界中”,因为通过使用这个库是非常简单的解析JSON。另外,json可以得到多少复杂的东西,我的意思是说,关键/值对都是如此复杂,没有什么不能用几行代码解决的,例如我会向你演示几个例子,以便你能够得到相信这是非常简单的事情:
假设你有从包含你在一个JSON数组需要格式化所有的信息服务器的响应,那么你可以做这样的事情来解析字符串:

JsonArray arrayJson = new JsonArray(response); 

但现在你想要访问arrayJson孩子:

for (int i = 0; i < arrayJson.length() - 1; i++) 
{ 
    JsonObject json = arrayJson.getJSONObject(i); 
} 

现在假设你有另一个json的数组,他的for循环: 然后你会得到他们这样说:

for (int i = 0; i < arrayJson.length() - 1; i++) 
{ 
    JsonObject json = arrayJson.getJSONObject(i); 
    JSONArray anotherArray = json.getJSONArray("key"); 
} 

.....,更嵌套你可以处理他们以同样的方式,所以我觉得我建立了我的观点。请记住,有时候,为寻找更简单的方法而努力工作,可能会让他们更难以做到。

+0

感谢您的评论,它支持我原本以为当我看到旁边的旧学校评论时所想的。我完全同意你所说的话,坦率地说,因为它的简单性,它认为它是一个更灵活和优雅的解决方案。 – Mike

+0

聪明为你,简单的代码==更好的解决方案。 – Daniel

+0

很高兴接受您的答案,因为它与我自己的原创思想不谋而合,而且我相信这将给我提供最灵活的解决方案。在很多方面,我更喜欢编写我自己的解析解决方案,将org.json解析与更深入轨道中的gson进行比较将会很有趣。 – Mike