使用单行对象结构检索android中的JSON

时间:2016-06-14 13:15:06

标签: java android json

我是 JSON 的新手以及我尝试从服务器检索 JSON 的操作

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

并且遇到了这个例外:

  

org.json.JSONException:Value   {"姓氏":"希克斯"" ID":18,"电子邮件":" dwaynehicks@usssulaco.com" ;,"如first_name":"德韦恩"}   类型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");*? 我没有这样的钥匙。

由于

3 个答案:

答案 0 :(得分:2)

您不需要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");

答案 1 :(得分:2)

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

^是单个JSON对象的实例。

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

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

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

&#34;回答&#34;你发现的是一个人阅读JsonObject,从该对象获取JsonArray(联系人),然后循环遍历该JsonArray中的所有JsonObjects的示例。这不适用于您,因为您只有一个扁平的JsonObject。

阅读API以查找适合获取每种类型的方法。在这种情况下,由于你有一个只有一个JsonObject的String对象,你可以使用JsonObjects构造函数,它在注释中表示像@SripadRaj这样的字符串。

答案 2 :(得分:1)

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();
    }