Android-在Java中解析JSON字符串

Android-在Java中解析JSON字符串,java,android,json,exception,Java,Android,Json,Exception,我有一个JSON字符串,我只是尝试访问它的不同属性,并将它们存储在Java变量中。但是,我不断收到以下代码的异常: private JSONObject jObj; private String jString; //... jString = result; //this is my JSON string passed from another activity try { jObj = new JSONObject(jStri

我有一个JSON字符串,我只是尝试访问它的不同属性,并将它们存储在Java变量中。但是,我不断收到以下代码的异常:

    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”,“事件名称”:“测试”,“事件地址”:“测试”,“事件持续时间”:“3”,“事件日期”:“20110527”,“事件时间”:“1347”,“事件描述”:“测试”,“出席人数”:“1”}]

这个字符串是通过一个PHP脚本接收的,在这个脚本中我执行echo json_encode($array),其中$array是创建这个json响应的关联数组

我得到的例外是:


“org.json.JSONException:org.json.JSONArray类型的值[//高于json字符串//]无法转换为JSONObject”

您正在尝试将JSONArray解析为JSONObject

JSONArray jarray=新的JSONArray(jString)


德国劳埃德船级社

Eclipse没有告诉您,因为您试图从JSONArray创建JSONObject:

JSONArray jArr = new JSONArray (jString);
int eventID = jArr.getJSONObject(0).getInt("eventID");
要回答您最后的评论(为什么会这样?):

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

JSONObject是名称/值对的无序集合。它的外部形式是一个用大括号括起来的字符串,名称和值之间用冒号,值和名称之间用逗号。内部形式是一个对象,具有get()和opt()方法,用于按名称访问值,以及put()方法用于按名称添加或替换值的方法。值可以是以下类型中的任意一种:Boolean、JSONArray、JSONObject、Number和String,或JSONObject.NULL对象

JSONArray是一个有序的值序列。其外部形式是一个用方括号括起来的字符串,值之间带有逗号。内部形式是一个对象,该对象具有get()和opt()方法,用于按索引访问值,以及put()方法用于添加或替换值的方法。值可以是以下类型中的任意一种:Boolean、JSONArray、JSONObject、Number和String,也可以是JSONObject.NULL对象


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

json异常是什么,json字符串是什么?您所做的应该可以。我用字符串和错误编辑了我的帖子。哦,我需要导入一些JSO吗NArray thing?Eclipse没有告诉我=(我同意Taylor的说法。如果你捕获了一个JSONException,那么jString不是一个有效的JSON字符串。哎呀,废话,好吧,我知道了如何使它工作。基本上我只是将类型更改为JSONArray(并导入JSONArray)一切都很顺利。出于好奇,为什么会这样?因为你在拉一个数组,而不是一个对象。