我可以解析此json,并将其存储在名为json的字符串中。

{
 "contacts": [
    {
            "id": "c200",
            "name": "Ravi Tamada",
            "email": "ravi@gmail.com",
    },
    {
            "id": "c201",
            "name": "Johnny Depp",
            "email": "johnny_depp@gmail.com",
    }
 ]
}

在Android中使用以下代码:

JSONObject object = new JSONObject(json);
JSONArray ob = object.getJSONArray("contacts");

问题是我想解析相同的JSON数组,但没有键或名称“ contacts”,如下所示:

{
 [
    {
            "id": "c200",
            "name": "Ravi Tamada",
            "email": "ravi@gmail.com",
    },
    {
            "id": "c201",
            "name": "Johnny Depp",
            "email": "johnny_depp@gmail.com",
    }
 ]
}

方法getJSONArray()需要数组的名称,但是在这种情况下,它没有一个。 可能对此进行解析还是Json语法不正确?

#1楼 票数:0

getJSONArray需要一个名称,因为根据JSON规范

对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。

因此,没有API来获取没有名称的数组(或任何其他类型),因为这没有任何意义。 问题中定义的对象没有名称,只有一个值,因此无效。

如果您只想传递数组,请删除大括号-您的JSON应该如下所示:

 [
    {
            "id": "c200",
            "name": "Ravi Tamada",
            "email": "ravi@gmail.com"
    },
    {
            "id": "c201",
            "name": "Johnny Depp",
            "email": "johnny_depp@gmail.com"
    }
 ]

没有理由使用杰克逊。 您可以像这样解析上面的String:

JSONArray contactArray = new JSONArray(json);

#2楼 票数:0

您可以使用gson库轻松地执行此操作。以下是代码示例:您需要两个Entity Class,一个是Holder Class,另一个是Entity Class。 实体类将如下所示:

 public class ResponseEntity {
    @SerializedName("id")
    public String id;
    @SerializedName("name")
    public String name;
    @SerializedName("email")
    public String email;
}


public class ResponseRoot{
    @SerializedName("contacts")
    public List<ResponseEntity> entities=null;

public ResponseRoot(){
    entities=new ArrayList<ResponseEntity>();
}
}

现在,使用GSON库转换此json数组。

Gson gson=new Gson();    
ResponseRoot entities = (ResponseRoot)gson.fromJson(yourResponseAsString.toString(),
      ResponseRoot.class);

现在,实体包含ResponseEntity元素。 使用迭代,您可以获得所有实体

谢谢

#3楼 票数:-1

您的json应该类似于:

[
   {
      "id":"c200",
      "name":"Ravi Tamada",
      "email":"ravi@gmail.com"
   },
   {
      "id":"c201",
      "name":"Johnny Depp",
      "email":"johnny_depp@gmail.com"
   }
]

杰克逊json库可以处理不带键名的json

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

    public static void main(final String... args) throws IOException {

        // read json file data to String
        byte[] jsonData = Files.readAllBytes(Paths.get("contacts.json"));

        // create ObjectMapper instance
        final ObjectMapper objectMapper = new ObjectMapper();

        // convert json string to object
        final Holder holder = objectMapper.readValue(jsonData, Holder.class);

        for (final Contact contact : holder.getContacts()) {
            System.out.println("id = " + contact.getId());
            System.out.println("name = " + contact.getName());
            System.out.println("email = " + contact.getEmail());
        }
    }
}


import com.fasterxml.jackson.annotation.JsonCreator;

public class Holder {

    private final Contact[] contacts;

    @JsonCreator
    public Holder(final Contact[] contacts) {
        super();
        this.contacts = contacts;
    }

    public Contact[] getContacts() {
        return contacts;
    }

}


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Contact {

    private final String id;
    private final String name;
    private final String email;

    @JsonCreator
    public Contact(@JsonProperty("id") final String id, @JsonProperty("name") final String name, @JsonProperty("email") final String email) {
        super();
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

}

contacts.json的内容是

[
   {
      "id":"c200",
      "name":"Ravi Tamada",
      "email":"ravi@gmail.com"
   },
   {
      "id":"c201",
      "name":"Johnny Depp",
      "email":"johnny_depp@gmail.com"
   }
]

  ask by Jose translate from so

未解决问题?本站智能推荐:

1回复

Android中的JSON数组解析

这是我的JSON对象,我想在android项目中解析它 怎么编译? 我想首先提取“第一”的属性并使用该属性,然后再使用“第一”的属性提取“第二”的参数。
3回复

没有键解析Json数组

我想从服务器解析一个数组,但无法获取该数组。这是jsonString成功获取: 我想要数据数组列表中的双值:
2回复

如何在没有数组键的情况下完成将JSON数组解析为Android中的列表视图

首先,我是android的新手。 现在,我正在构建一个学校申请。 它的功能之一是有一个功能,可以为学生安排什么时间表。 我已经学习了此功能的教程,但仍然无法满足我的需求。 我想从JSONArray解析值,然后在ListView中显示值。 但这仅给我一个准确的数据。 首先让我从JSO
2回复

解析JSON,数组中的数组(Android)

我正在尝试从http://www.worldweatheronline.com JSON提要解析天气信息。 这是它的格式: 所以有current_condition JSONArray ,我已经设法从中获取值。 但是,我如何从内部数组weatherDesc或weatherIconUrl读
1回复

如何在Android上解析无键json数组?[重复]

这个问题已经在这里有了答案: 如何在Android中解析JSON? [重复] 3个答案 我一直试图解析这个无键json数组一段时间。 我知道有很多关于如何解析json数组的教程,但是它们始终遵循相同的模式。 我在这里有这个网站,试图解析和显示文本。 http://ec2
3回复

如何使用网址解析android中的json数组?

我试图解析多个由嵌套json arrys组成的json数组。 我在Google上搜索了很多,但不知道该怎么做。 我已经完成了以下代码,但是并没有给我所有的值。 到目前为止,我已经完成了此编码, result字符串显示items array ,而jArray显示questions arra
1回复

如何在android中解析嵌套的Json数组

{ "Error": null, "InternalError": null, "IsSuccessful": true, "Message": null, "Branches": [ { "Id": 1, "Name": "XYZ", "Years": [ { "Id": 6, "Year": "
3回复

如何在Android中解析此Json数组

我有一个想在我的Android应用程序中解析的jsonArray。 数组:- 我的Android代码:- 的AsyncTask: - JsonFunctions.java 我得到的错误:- json托管在这里 我正在按照本教程学习json解析,但是本教程使用json