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的”
的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!
什么是json异常,什么是json字符串pls?你在做什么*应该*工作。 – Taylor 2011-05-27 19:04:44
我编辑我的帖子与字符串和错误。呃哦,我需要导入一些JSONArray的东西吗? Eclipse没有告诉我=( – JDS 2011-05-27 19:16:30
我同意泰勒。如果您正在捕获JSONException,那么jString是**不是**有效的JSON字符串。 – Aleadam 2011-05-27 19:17:10