我可以解析这个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语法不对吗?
答案 0 :(得分:0)
getJSONArray
需要一个名称,因为the JSON spec:
对象是零个或多个名称/值的无序集合 对,其中名称是字符串,值是字符串,数字, boolean,null,object或array。
因此,没有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);
答案 1 :(得分:0)
您可以使用gson库轻松完成。这是代码示例: 您需要两个实体类,一个是Holder类,另一个是实体类。 实体类将是这样的:
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元素。使用迭代,你可以得到所有的enitiies
Thanks`
答案 2 :(得分:-1)
你的json应该像这样: -
[
{
"id":"c200",
"name":"Ravi Tamada",
"email":"ravi@gmail.com"
},
{
"id":"c201",
"name":"Johnny Depp",
"email":"johnny_depp@gmail.com"
}
]
jackson 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"
}
]