Android - 解析Java中的JSON字符串

问题描述:

我有一个JSON字符串,我只是试图访问它的不同属性并将它们存储在Java变量中。不过,我一直使用以下代码获得例外:Android - 解析Java中的JSON字符串

private JSONObject jObj; 
    private String jString; 

//... 
jString = result; //this is my JSON string passed from another activity 
     try { 

      jObj = new JSONObject(jString); 
      //int eventID = jObj.getInt("eventID"); 





     } catch (JSONException e) { 
      Toast.makeText(searchResultsActivity.this, "Search results failed!", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } 

是的我有所需的导入。我自己显示了jString以确认它是有效的JSON。我有点失落,因为这似乎是我需要做的最基本的事情。感谢任何帮助人。

编辑 - 这里是一个例子JSON字符串:

[{ “EVENTID”: “47”, “EVENT_NAME”: “测试”, “EVENT_ADDRESS”: “测试”, “event_duration”: “3” ,“event_date”:“20110527”,“event_time”:“1347”,“event_description”:“Test”,“num_attending”:“1”}]

该字符串通过PHP脚本接收, json_encode($ array),其中$ array是创建此JSON响应的关联数组。

我得到的例外是:

“org.json.JSONException:值[//上述JSON字符串//]类型的org.json.JSONArray不能被转换为JSONObject的”

+3

什么是json异常,什么是json字符串pls?你在做什么*应该*工作。 – Taylor 2011-05-27 19:04:44

+0

我编辑我的帖子与字符串和错误。呃哦,我需要导入一些JSONArray的东西吗? Eclipse没有告诉我=( – JDS 2011-05-27 19:16:30

+0

我同意泰勒。如果您正在捕获JSONException,那么jString是**不是**有效的JSON字符串。 – Aleadam 2011-05-27 19:17:10

的Eclipse没有告诉你,因为你正试图从一个JSONArray创建一个JSONObject:

JSONArray jArr = new JSONArray (jString); 
int eventID = jArr.getJSONObject(0).getInt("eventID"); 

要回答你的最后一个注释(这是为什么?):

从(原始文件] (http://www.json.org/java/index.html):

一个JSONObject是名称/值对的无序集合其外形为包裹在以c大括号的字符串名称和值之间的联系,以及值和名称之间的逗号。内部表单是一个具有get()和opt()方法的对象,用于按名称访问值,put()方法用于按名称添加或替换值。这些值可以是以下任何类型:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL对象。

JSONArray是一个有序的值序列。 它的外部形式是一个用方括号括起来的字符串,两个值之间用逗号隔开。内部表单是一个具有get()和opt()方法的对象,用于按索引访问值,put()方法用于添加或替换值。这些值可以是以下任何类型:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL对象。

由于您解析的是以方括号而不是大括号开头的字符串,因此需要将其解析为JSONArray。在你的情况下,它是一个大小为1的数组。

你是试图解析一个JSONArray作为一个JSONObject

JSONArray jarray = new JSONArray(jString);

GL!