假设我们有以下JSON字符串:
{
"name" : "John",
"age" : "20",
"address" : "some address",
"someobject" : {
"field" : "value"
}
}
什么是最简单的(但仍然正确的,即不可以使用正则表达式)找到字段 age
及其值(或确定没有给定名称的字段)的方法?
假设我们有以下JSON字符串:
{
"name" : "John",
"age" : "20",
"address" : "some address",
"someobject" : {
"field" : "value"
}
}
什么是最简单的(但仍然正确的,即不可以使用正则表达式)找到字段 age
及其值(或确定没有给定名称的字段)的方法?
String jsonString = "{ \"name\" : \"John\", \"age\" : \"20\", \"address\" : \"some address\" }";
JSONObject jsonObject = new JSONObject(jsonString);
int age = jsonObject.getInt("age");
我同意Google的Gson
非常清晰易懂。但是你应该为从JSON字符串获取实例创建一个结果类。如果你不能明确结果类,可以使用json-simple
:
// import static org.hamcrest.CoreMatchers.is;
// import static org.junit.Assert.assertThat;
// import org.json.simple.JSONObject;
// import org.json.simple.JSONValue;
// import org.junit.Test;
@Test
public void json2Object() {
// given
String jsonString = "{\"name\" : \"John\",\"age\" : \"20\","
+ "\"address\" : \"some address\","
+ "\"someobject\" : {\"field\" : \"value\"}}";
// when
JSONObject object = (JSONObject) JSONValue.parse(jsonString);
// then
@SuppressWarnings("unchecked")
Set<String> keySet = object.keySet();
for (String key : keySet) {
Object value = object.get(key);
System.out.printf("%s=%s (%s)\n", key, value, value.getClass()
.getSimpleName());
}
assertThat(object.get("age").toString(), is("20"));
}
< p >使用Gson
和json-simple
的优缺点,就像使用用户定义的Java对象和Map
一样。您定义的对象对所有字段(名称和类型)都很清晰,但比Map
不够灵活。
Gson提供了一种最简单的解决方案。与类似的Jackson或svenson等API相比,Gson默认情况下甚至不需要Java结构中有绑定可用的未使用JSON元素。特别针对所问的问题,以下是一个可行的解决方案。
import com.google.gson.Gson;
public class Foo
{
static String jsonInput =
"{" +
"\"name\":\"John\"," +
"\"age\":\"20\"," +
"\"address\":\"some address\"," +
"\"someobject\":" +
"{" +
"\"field\":\"value\"" +
"}" +
"}";
String age;
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
Foo thing = gson.fromJson(jsonInput, Foo.class);
if (thing.age != null)
{
System.out.println("age is " + thing.age);
}
else
{
System.out.println("age element not present or value is null");
}
}
}
import com.google.gson.JsonObject; import com.google.gson.JsonParser; JsonParser parser = new JsonParser(); JsonObject obj = parser.parse(jsonString).getAsJsonObject(); String age = obj.get("age").getAsString();
- Suliman Alzamelimplementation('org.json:json:20230227')
添加到您的build.gradle
中,然后使用int age = new JSONObject(yourJsonString).getInt("age")
来获取年龄。 - Marco Lackovic