【问题标题】:Android - parsing JSON strings in JavaAndroid - 在 Java 中解析 JSON 字符串
【发布时间】:2011-05-27 19:03:31
【问题描述】:

我有一个 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","event_name":"test","event_address":"Test","event_duration":"3","event_date":"20110527","event_time":" 1347","event_description":"Test","num_attending":"1"}]

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

我得到的例外是:

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

【问题讨论】:

  • 什么是json异常,请问json字符串是什么?你在做什么应该工作。
  • 我用字符串和错误编辑了我的帖子。哦,我需要导入一些 JSONArray 的东西吗? Eclipse 没有告诉我 =(
  • 我同意泰勒的观点。如果您正在捕获 JSONException,则 jString 不是有效的 JSON 字符串。
  • Aww 废话,好的,我想出了如何让它工作。基本上我只是将类型更改为 JSONArray(并导入 JSONArray),一切正常。出于好奇,这是为什么呢?
  • 因为你拉的是一个数组,而不是一个对象。

标签: java android json exception


【解决方案1】:

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 的数组。

【讨论】:

    【解决方案2】:

    您正在尝试将 JSONArray 解析为 JSONObject

    JSONArray jarray = new JSONArray(jString);

    gl!

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多