2013-11-10 73 views
0

错误: E/AndroidRuntime(2711):java.lang.IllegalStateException:在资产产生预期的名称但STRING安卓:JSON parseing错误

文件(测试)的内容:

[ 
    { 
    "title": "baidu", 
    "url": "http://www.baidu.com" 
    } 
] 

解析代码:

new Thread(){ 
     @Override 
     public void run() 
     { 
      try 
      { 
       InputStream is = MainActivity.this.getResources() 
           .getAssets().open("test"); 
       InputStreamReader in = new InputStreamReader(is); 
       JsonReader reader = new JsonReader(in); 
       reader.beginArray(); 
       while(reader.hasNext()) 
       { 
        reader.beginObject(); 
        while(reader.hasNext()) 
        { 
         System.out.println(reader.nextName()); 
        } 
        reader.endObject(); 
       } 
       reader.endArray(); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

    }.start(); 
+0

您正在执行'reader.beginArray();'但您的json中没有任何数组。其次,发布完整的logcat输出 –

+0

@RahulGupta'['表示一个json数组节点。所以op有json数组 – Raghunandan

回答

0

在这一部分:

while(reader.hasNext()) 
{ 
    System.out.println(reader.nextName()); 
} 

你只消耗的名字,但不是的价值属性。在第二次迭代中,您因此获得值标记(字符串)并尝试将其作为名称读取。

0
[ // json array node 
    { // json object node 
    "title": "baidu", // json string 
    "url": "http://www.baidu.com" 
    } 
] 

尝试以下

try 
    { 
     InputStream is = MainActivity.this.getResources() 
         .getAssets().open("test"); 
     InputStreamReader in = new InputStreamReader(is); 
     reader = new JsonReader(in); 
     reader.beginArray();    
     while (reader.hasNext()) { 
      reader.beginObject(); 
      while (reader.hasNext()) { 
       String name = reader.nextName(); 
       if (name.equals("title")) { 
       String title = reader.nextString(); 
       Log.i("..........",title); 
       } else if (name.equals("url")) { 
       String url = reader.nextString(); 
       Log.i("..........",url); 
       } else { 
       reader.skipValue(); 
       } 
      } 
      reader.endObject(); 
     } 
     reader.endArray(); // end array 
    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try { 
      reader.close(); // remember to close the reader 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

日志

11-10 06:52:31.501: I/..........(2201): baidu 
11-10 06:52:31.518: I/..........(2201): http://www.baidu.com 

还要检查这个

http://developer.android.com/reference/android/util/JsonReader.html

+0

谢谢你的详细回答! – zcloud