假设我有以下JSON文件:
{
"id1" : "User",
"id2" : "Admin"
"gender" : "Male"
}
如果我想检查一个JSONObject是否有一个包含字符串'id'的密钥,我该怎么做呢?当我尝试做类似的事情:
for(JsonElement e : json.getAsJsonObject().get("accounts").getAsJsonArray()){
JsonObject json = e.getAsJsonObject();
if(json.has("id")){
//do stuff
}
}
它似乎不起作用。我认为这是因为JSON中的键名不是严格命名为“id”而是“id1”和“id2”。
我知道这些方法找到关键
import org.json.JSONObject;
JSONObject object = new JSONObject("your json");
setString(object.keySet());
list(object.keys());
System.out.println(object.keySet().contains("id1")); // boolean will be return if your json has id1 or id2 and you are looking for id it will return false
public void setString(Set<String> list)
{
for(String s1:list)
{
if(s1.contains("id"))
{
System.out.println("Contains");
}
}
}
public void list(Iterator<String> list)
{
while(list.hasNext())
{
if(list.next().contains("id"))
{
System.out.println("Contains");
}
}
}
我已经使用了json-simple1.1.jar。
JSONParser parser= new JSONParser();
try{
Object obj = parser.parse(new FileReader("E://test.json"));
JSONObject jsonObject = (JSONObject) obj;
Iterator iterator = jsonObject.keySet().iterator();
while(iterator.hasNext())
{
if(String.valueOf(iterator.next()).startsWith("id")){
System.out.println("Present");
}
}
}
catch(Exception e)
{
//Logging error message
}
如果使用Java 8
或更高版本:获取JsonObject
字段作为条目集和循环
String json = "{ \"id1\" : \"User\", \"id2\" : \"Admin\","
+ " \"gender\" : \"Male\" }";
JsonParser jp = new JsonParser();
JsonObject jo = jp.parse(new StringReader(json)).getAsJsonObject();
jo.entrySet().forEach( e -> {
if(e.getKey().startsWith("id")) // or contains("id")
log.info("has key: {}", e.getKey()); ;
});
输出就像
2017-12-16 20:07:43.779 INFO org.example.ExampleJUnitTTest:52 - 有密钥:id1 2017-12-16 20:07:43.785 INFO org.example.ExampleJUnitTTest:52 - 有密钥:id2