2013-05-17 248 views
0

我有被读取并存储在String称为jsonString这个JSON文件,它看起来像这样:解析JSON字符串

{ 
    "position":1, 
    "team_id":10260, 
    "home": 
    { 
    "played":18, 
    }, 
}, 
{ 
    "position":2, 
    "team_id":8456, 
    "home": 
    { 
    "played":12, 
    }, 
}, 

代码解析:

JSONObject obj = new JSONObject(jsonString); 
Iterator it = obj.keys(); 

    while(it.hasNext()){ 
     String s = it.next().toString(); 
     System.out.print(s + " " + obj.getString(s) + " "); 
    } 

输出是:position 1 home {"played":18} team_id 10260

所以它不读取文件的其余部分。你能告诉我有什么问题吗?而且,为什么home {"played":18}team_id 10260之前打印?

回答

4

如果你看看括号的组织方式,你可以看到你的String实际上包含了几个JSON对象,并且在第一个完整对象之后停止构造。

关于你的第二个问题,Iterator小号很少有保证的顺序,所以你不能做哪些责令元素将被退回任何假设。

+0

那么我怎样才能移动到下一个'JSON'对象呢? – Sam

+1

您应该确保输入遵循'JSON'标准格式。如何做到这一点取决于你在哪里获得你的indata。它看起来像你所拥有的是一个数组,在这种情况下,你需要在数据的末尾添加一个'['到开始和']'。 – Keppil

+0

它实际上有'[]',但引发了一个异常:'Syntax error,insert“}”来完成Block',所以我删除了它们。我想我明白了。谢谢。 – Sam

2

的顺序将是依赖于Map类型JSONObject使用;可能是不确定的,或者可能是按键的代码点,或者可能是为了读取,这取决于,例如, HashMap,TreeMapLinkedHashMap

除此之外,还有两个对象被序列化,JSONObject显然刚刚在第一个对象后面停止。您可能需要将整个输入包装在一组{}中。