【问题标题】:Retrieving JSON in android with single line object structure使用单行对象结构在android中检索JSON
【发布时间】:2016-06-14 13:15:06
【问题描述】:

我对 JSON 很陌生,这是我试图从服务器检索 JSON 的操作

 datafromServer = bufferedReader.readLine();
                inputStream.close();
JSONArray jsonArray = new JSONArray(datafromServer );

遇到了这个异常:

org.json.JSONException: 值 {"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"Dwayne"} org.json.JSONObject 类型的无法转换为 JSONArray

于是我找到了this 答案:

JSONObject object = new JSONObject(result);
JSONArray Jarray = object.getJSONArray("contacts");

for (int i = 0; i < Jarray.length(); i++) {
   JSONObject Jasonobject = Jarray.getJSONObject(i);

现在,问题是,在答案中,OP 的对象形成为:

 "contacts": [{
        .....
        .....

         ]

在这个 JSON 中。虽然我得到了(没有键映射到这一行):

{"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"Dwayne"}

那么我是如何修改*JSONArray Jarray = object.getJSONArray("contacts");*这一行的呢? 我没有这样的钥匙。

谢谢

【问题讨论】:

  • 尝试JSONObject obj = new JSONObject(dataFromServer) 而不是JSONArray
  • 所有 JSON 格式都是 '{"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"Dwayne"}'您正在尝试阅读,或者这只是其中的一部分?
  • 谢谢你们……你们正确地回答了我的问题,因为我问的不是异常而是 structure 访问。 :D

标签: java android json


【解决方案1】:

您不需要 JSONArray,您可以像这样从 JSONObject 获取数据:

JSONObject jsonObject = new JSONObject(result);
String lastName = jsonObject.getString("last_name");
int id = jsonObject.getInt("id");
String email = jsonObject.getString("email");
String firstName = jsonObject.getString("first_name");

【讨论】:

  • 所以你刚刚修正了我对结构的理解谢谢
【解决方案2】:

{"last_name":"Hicks","id":18,"email":"dwaynehicks@usssulaco.com","first_name":"‌​Dwayne"}

^ 是单个 JSON 对象的实例。

{"contacts": [{...}, {...}]}

^ 是单个 JSON 数组的实例。 JSON 数组中可以包含 0 到多个 JSON 对象。

第一个错误是由于尝试使用表示 JsonObject 的字符串创建 JSONArray 引起的。

您找到的“答案”是某人读取 JsonObject,从该对象获取 JsonArray(联系人),然后遍历该 JsonArray 中的所有 JsonObjects 的示例。这不适用于您,因为您只有一个平面 JsonObject。

阅读 API 以找到适合获取每种类型的方法。在这种情况下,由于您有一个恰好是一个 JsonObject 的 String 对象,因此您可以使用 JsonObjects 构造函数,该构造函数采用像 @SripadRaj 在 cmets 中所说的 String 。

【讨论】:

  • 所以你刚刚修正了我对结构的理解,谢谢
  • 如果您在理解 JSON 时遇到问题,请将其复制并粘贴到在线 JSON 编辑器中。他们中的许多人都有工具可以将其文本版本转换为可视化表示。 jsoneditoronline.org
  • 谢谢你,一个 json 编辑器怎么可能让我理解 json 本身:D
  • @Hey-men-whatsup 取一个令人困惑的 JSON 对象。将其粘贴在左侧,然后在中心点击右侧阵列。在右侧,您会看到(可能对某些人来说)更易于理解的 JSON 显示。
【解决方案3】:

Json代码需要进入try catch

   try{
    JSONObject object = new JSONObject(result);
    JSONArray Jarray = object.getJSONArray("contacts");

       for (int i = 0; i < Jarray.length(); i++) {
          JSONObject Jasonobject = Jarray.getJSONObject(i);
            String lastName = jsonObject.getString("last_name");
            int id = jsonObject.getInt("id");
            String email = jsonObject.getString("email");
            String firstName = jsonObject.getString("first_name");
       }
    }catch (JSONException e) {
       e.printStackTrace();
    }

【讨论】:

  • 嗯......你误解了我的问题,但无论如何都要加一个:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
相关资源
最近更新 更多