![](/img/trans.png)
[英]Java get one JSONObject from a JsonArray and set json response
[英]Java get one JSONObject from a JsonArray
我有一个Json数组,我想从它只获得一个Json对象。 在这个例子中,我如何通过Apple获取对象
[
{
"name": "mango",
"use": "DA",
"date": "2011-09-26",
"seed": "31341"
},
{
"name": "apple",
"use": "DA",
"date": "2011-09-26",
"seed": "31341"
},
{
"name": "berry",
"use": "DA",
"date": "2011-09-26",
"seed": "31341"
}
]
以前我曾经通过它的索引位置得到它,但由于json不保证我的顺序/排列,这就是为什么我需要专门获取一个对象而不使用索引方法。
您可以使用循环迭代JSONArray中的每个项目,并找到哪个JSONObject具有您想要的键。
private int getPosition(JSONArray jsonArray) throws JSONException {
for(int index = 0; index < jsonArray.length(); index++) {
JSONObject jsonObject = jsonArray.getJSONObject(index);
if(jsonObject.getString("name").equals("apple")) {
return index; //this is the index of the JSONObject you want
}
}
return -1; //it wasn't found at all
}
您还可以返回JSONObject而不是索引。 只需更改方法签名中的返回类型:
private JSONObject getPosition(JSONArray jsonArray) throws JSONException {
for(int index = 0; index < jsonArray.length(); index++) {
JSONObject jsonObject = jsonArray.getJSONObject(index);
if(jsonObject.getString("name").equals("apple")) {
return jsonObject; //this is the index of the JSONObject you want
}
}
return null; //it wasn't found at all
}
因为你不能依赖于indecies,你将不得不使用另一个标识符。 最好的一个可能是“名称”字段。
要找到具有特定名称的一个对象,您必须遍历数组并检查每个对象,这是我执行此操作的代码,它可能不是最好或最有效的方法,但它可以工作。 该示例使用GSON,但它应该很容易适应:
/**
* Function for getting an object with a specific name from an array.
*
* @param arr The JsonArray to check in.
* @param name The name to check for.
* @return The JsonObject with a matching name field or null if none where found.
*/
public static JsonObject getObjectWithName(JsonArray arr, String name)
{
//Iterate over all elements in that array
for(JsonElement elm : arr)
{
if(elm.isJsonObject()) //If the current element is an object.
{
JsonObject obj = elm.getAsJsonObject();
if(obj.has("name")) //If the object has a field named "name"
{
JsonElement objElm = obj.get("name"); //The value of that field
//Check if the value is a string and if it equals the given name
if(objElm.isJsonPrimitive() && objElm.getAsJsonPrimitive().isString() && objElm.getAsString().equals(name))
{
return obj;
}
}
}
}
//Nothing matching was found so return null
return null;
}
您可以将Jackson库与ObjectMapper
// Create a pojo for the json object
public class MyObject {
public String name;
public String use;
public String date;
public String seed;
}
...
public MyObject getApple(String jsonString) throws IOException {
// the string type is MyObject array
MyObject[] myObjects = new ObjectMapper().readValue(jsonString, MyObject[].class);
for (MyObject myObject : myObjects ){
if myObject.name.equals("apple") {
return myObject;
}
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.