Android:JSON解析错误

时间:2013-11-10 05:44:50

标签: android json

错误: E / AndroidRuntime(2711):java.lang.IllegalStateException:预期名称但是为STRING

在assests下的文件(test)的内容:

[
  {
    "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();

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在这部分:

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

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