在Java ME中将JSONstring转换为对象?

有没有在Java / J2ME转换string的方法,如:

{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来说是完美的。

您可以像这样在一行中将JSONparsing为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最简单的select是:

 MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class); 

还有其他同样简单的使用库(Gson已经提到过); 但有些select比较费力,比如原来的org.json库,即使你不需要这些,也需要你创build中间的“JSONObject”。

GSON是将java对象转换为json对象的好select,反之亦然。
这是一个由谷歌提供的工具。

用于将json转换为java对象使用: fromJson(jsonObject,javaclassname.class)
将java对象转换为json对象使用: toJson(javaObject)
rest会自动完成

欲了解更多信息和下载

您可以使用Google GSON轻松完成此操作。

假设您有一个名为User的类,其字段为user,width和height,并且您希望将下面的jsonstring转换为User对象。

{"name":"MyNode", "width":200, "height":100}

你可以很容易地做到这一点,而不必投(保持nimcap的评论;)),用下面的代码:

 Gson gson = new Gson(); final User user = gson.fromJson(jsonString, User.class); 

其中jsonString是上面的JSONstring。

有关详情,请查看https://code.google.com/p/google-gson/

您有许多用于Java的JSONparsing器 :

  • JSONObject.java
    JSONObject是名称/值对的无序集合。 它的外部forms是一个用大括号括起来的string,名称和值之间是冒号,值和名称之间用逗号隔开。 内部表单是一个具有get()和opt()方法的对象,用于按名称访问值,put()方法用于按名称添加或replace值。 这些值可以是以下任何types:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL对象。

  • JSONArray.java
    JSONArray是一个有序的值序列。 它的外部forms是一个用方括号括起来的string,两个值之间用逗号隔开。 内部表单是一个具有get()和opt()方法的对象,用于通过索引访问值,put()方法用于添加或replace值。 这些值可以是以下任何types:Boolean,JSONArray,JSONObject,Number和String,或JSONObject.NULL对象。

  • JSONStringer.java
    JSONStringer是快速生成JSON文本的工具。

  • JSONWriter.java
    JSONWriter是一种快速将JSON文本写入stream的工具。

  • JSONTokener.java
    JSONTokener接收一个源string并从中提取字符和标记。 它被JSONObject和JSONArray构造函数用来parsingJSON源string。

  • JSONException.java
    如果检测到语法或程序错误,则会引发JSONException。

  • JSONString.java
    JSONString是一个允许类实现JSON序列化的接口。

JSON的官方网站是你应该看的地方。 它提供了可以和Java一起使用的各种库,我个人使用过这个JSON-lib ,它是网站工作的一个实现,所以它在这个页面上具有完全相同的类方法等等。

如果你点击html链接,你可以find任何你想要的。

简而言之:

创build一个json对象和一个json数组,代码是:

 JSONObject obj = new JSONObject(); obj.put("variable1", o1); obj.put("variable2", o2); JSONArray array = new JSONArray(); array.put(obj); 

o1,o2可以是原始types(long,int,boolean),string或数组。

相反的过程相当简单,我的意思是将一个string转换为json对象/数组。

 String myString; JSONObject obj = new JSONObject(myString); JSONArray array = new JSONArray(myString); 

为了正确parsing你只需要知道你是否正在parsing一个数组或对象。

使用谷歌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 IO是将JSONstring或JSONinputstream转换为Java对象的最简单方法

string到Java对象
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");

https://code.google.com/p/json-io/

这是一个古老的问题,json-simple( https://code.google.com/p/json-simple/ )当时可能是一个很好的解决scheme,但是请考虑一下,项目似乎没有活跃一段时间!

我build议现在托pipe在: https : //github.com/google/gson

如果性能是你的问题,你可以看看一些基准http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/比较。;

除了www.json.org,您还可以使用javacc实现自己的parsing器,并匹配个人的语法/模式。 在我的博客上看到这个笔记: http : //plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

我写了一个使用json.org来parsingJSON的库,但它实际上会为您创build一个接口的代理。 代码/ JAR位于code.google.com上。

http://fixjures.googlecode.com/

我不知道它是否适用于J2ME。 由于它使用Javareflection来创build代理,我认为这是行不通的。 另外,它目前对我想要移除的Google Collections有着很强的依赖性,可能对您的需求来说太重量级了,但它允许您以您要查找的方式与您的JSON数据进行交互:

 interface Foo { String getName(); int getWidth(); int getHeight(); } Foo myFoo = Fixjure.of(Foo.class).from(JSONSource.newJsonString("{ name : \"foo name\" }")).create(); String name = myFoo.getName(); // name now .equals("foo name"); 

jackson的大文件, GSON的小文件,和JSON.simple处理两者。

只需在Java中使用下面的Json String来创build一个Json对象

 {name:"MyNode", width:200, height:100} 

如果以上是你的Jsonstring,只需创build一个Json对象。

 JsonString ="{name:"MyNode", width:200, height:100}"; JSONObject yourJsonObject = new JSONObject(JsonString); System.out.println("name=" + yourJsonObject.getString("name")); System.out.println("width=" + yourJsonObject.getString("width"));