在Java/J2ME中,是否有一种方法可以将字符串转换为:
{name:"MyNode", width:200, height:100}
有没有一行代码将其转换为内部对象表示形式呢?
因为当前的方法太过繁琐:
Object n = create("new");
setString(p, "name", "MyNode");
setInteger(p, "width", 200);
setInteger(p, "height", 100);
或许需要一个 JSON 库?
在Java/J2ME中,是否有一种方法可以将字符串转换为:
{name:"MyNode", width:200, height:100}
有没有一行代码将其转换为内部对象表示形式呢?
因为当前的方法太过繁琐:
Object n = create("new");
setString(p, "name", "MyNode");
setInteger(p, "width", 200);
setInteger(p, "height", 100);
或许需要一个 JSON 库?
我使用了几个库,我最喜欢的是:
http://code.google.com/p/json-simple/
这个库非常小,非常适合在J2ME中使用。
你可以像这样一行代码将JSON解析为Java对象:
JSONObject json = (JSONObject)new JSONParser().parse("{\"name\":\"MyNode\", \"width\":200, \"height\":100}");
System.out.println("name=" + json.get("name"));
System.out.println("width=" + json.get("width"));
最简单的选择是Jackson:
MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class);
还有其他同样易于使用的库(如Gson);但有些选择更费力,比如原始的org.json库,即使您不需要中间的“JSONObject”,也需要创建它。
Object obj = new ObjectMapper().readValue("[1, 2, 3]", Object.class);
- neoneyeGSON是一个将Java对象转换为JSON对象以及相反转换的良好工具选项。
这是由Google提供的工具。
要将JSON转换为Java对象,请使用:fromJson(jsonObject,javaclassname.class)
要将Java对象转换为JSON对象,请使用:toJson(javaObject)
剩下的内容将自动完成
欲知更多信息并下载
您可以使用Google GSON轻松完成此操作。
假设您有一个名为User的类,具有用户、宽度和高度字段,并且您想要将以下JSON字符串转换为User对象。
{"name":"MyNode", "width":200, "height":100}
您可以使用以下代码轻松实现,无需强制转换(请记住nimcap的评论 ;)):
Gson gson = new Gson();
final User user = gson.fromJson(jsonString, User.class);
其中jsonString是上述JSON字符串。
您可以使用许多适用于Java的JSON解析器:
JSONObject.java
JSONObject是一个无序的名称/值对集合。它的外部形式是一个用花括号包裹的字符串,名称和值之间用冒号分隔,值和名称之间用逗号分隔。内部形式是一个对象,具有通过名称访问值的get()和opt()方法,以及通过名称添加或替换值的put()方法。这些值可以是以下任何类型:Boolean、JSONArray、JSONObject、Number和String,或者是JSONObject.NULL对象。
JSONArray.java
JSONArray是一个有序的值序列。它的外部形式是一个用方括号包裹的字符串,其中值之间用逗号分隔。内部形式是一个对象,具有通过索引访问值的get()和opt()方法,以及添加或替换值的put()方法。这些值可以是以下任何类型:Boolean、JSONArray、JSONObject、Number和String,或者是JSONObject.NULL对象。
JSONStringer.java
JSONStringer是一种快速生成JSON文本的工具。
JSONWriter.java
JSONWriter是一种快速将JSON文本写入流的工具。
JSONTokener.java
JSONTokener接受源字符串并从中提取字符和标记。它被JSONObject和JSONArray构造函数用于解析JSON源字符串。
JSONException.java
当检测到语法或过程错误时,抛出一个JSONException。
JSONString.java
JSONString是一个接口,允许类实现它们的JSON序列化。
JSON官方网站是你应该查看的地方。它提供了可以与Java一起使用的各种库,我个人使用过这个JSON-lib,它是该网站工作的一个实现,因此在这个页面中具有完全相同的类 - 方法等。
如果您单击那里的HTML链接,您可以找到任何您想要的东西。
简而言之:
创建JSON对象和JSON数组的代码是:
JSONObject obj = new JSONObject();
obj.put("variable1", o1);
obj.put("variable2", o2);
JSONArray array = new JSONArray();
array.put(obj);
o1,o2可以是原始类型(long、int、boolean)、字符串或数组。
反向过程相对简单,也就是将字符串转换为JSON对象/数组。
String myString;
JSONObject obj = new JSONObject(myString);
JSONArray array = new JSONArray(myString);
为了正确解析,您只需要知道您正在解析一个数组还是一个对象。
使用Google的GSON库来完成此操作。
public static <T> T getObject(final String jsonString, final Class<T> objectClass) {
Gson gson = new Gson();
return gson.fromJson(jsonString, objectClass);
}
http://iandjava.blogspot.in/2014/01/java-object-to-json-and-json-to-java.html
像许多人已经提到的那样,使用JSON.simple可以很容易地完成以下操作:
import org.json.JSONObject;
String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);
然后使用jsonObj处理JSON对象。例如:jsonObj.get("name");
根据下面的链接,JSON.simple对于小型和大型JSON文件都显示出恒定的效率。
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
这是一个旧问题,json-simple (https://code.google.com/p/json-simple/) 可以是那时一个不错的解决方案,但请注意该项目似乎已经有一段时间没有活跃更新了!
我建议使用 Gson,它现在托管在:https://github.com/google/gson
如果性能是您关注的问题,可以查看一些比较结果,http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/。
JSON IO是将JSON字符串或JSON输入流转换为Java对象的最简单方法。
将字符串转换为Java对象
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");
{"name":"MyNode", "width":200, "height":100}
。 - Esteban Küber