Rom*_*man 31 java json gson json-simple
假设我们有下一个JSON字符串:
{
"name" : "John",
"age" : "20",
"address" : "some address",
"someobject" : {
"field" : "value"
}
}
Run Code Online (Sandbox Code Playgroud)
什么是最简单的(但仍然是正确的,即正则表达式是不可接受的)查找字段age及其值的方法(或确定没有给定名称的字段)?
ps任何开源库都可以.
ps2:拜托,不要发布图书馆的链接 - 这不是一个有用的答案.'给我看代码'(c).
dev*_*ole 29
使用JSON库来解析字符串并检索值.
以下非常基本的示例使用Android 内置的JSON解析器.
String jsonString = "{ \"name\" : \"John\", \"age\" : \"20\", \"address\" : \"some address\" }";
JSONObject jsonObject = new JSONObject(jsonString);
int age = jsonObject.getInt("age");
Run Code Online (Sandbox Code Playgroud)
更高级的JSON库,如jackson,google-gson,json-io或genson,允许您直接将JSON对象转换为Java对象.
Gson允许最简单的解决方案之一.与Jackson或svenson等类似的API相比,Gson默认甚至不需要未使用的JSON元素来在Java结构中提供绑定.具体问题,这是一个有效的解决方案.
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我同意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"));
}
Run Code Online (Sandbox Code Playgroud)
优点和缺点的Gson,并json-simple是很像的优点和用户定义的Java对象的缺点和Map.您定义的对象对于所有字段(名称和类型)都是清晰的,但不太灵活Map.
| 归档时间: |
|
| 查看次数: |
121251 次 |
| 最近记录: |