Convert a JSON string to object in Java ME?

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 库?

456209 次浏览

You have many 用于 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 文本的工具

  • Java
    JSONWriter 是一个快速将 JSON 文本写入流的工具

  • Java
    JSONTokener 获取源字符串并从中提取字符和标记。JSONObject 和 JSONArray 构造函数使用它来解析 JSON 源字符串。

  • JSONException.java
    当检测到语法或过程错误时,将引发 JSONException。

  • Java
    JSONString 是一个接口,允许类实现它们的 JSON 序列化

除了 Www.json.org,您还可以使用 Javacc实现自己的解析器,并匹配您的个人语法/模式。 See this note on my blog : http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

我用了一些,我最喜欢的是,

Http://code.google.com/p/json-simple/

The library is very small so it's perfect for 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"));

我已经编写了一个使用 JSON.org 解析 JSON 的库,但它实际上将为您创建一个接口的代理。Code/JAR 在 code.google.com 上。

Http://fixjures.googlecode.com/

我不知道它是否适用于 J2ME。由于它使用 Java 反射来创建代理,我认为它不会工作。另外,它现在很依赖 Google CollectionsI,我想移除它,它可能对你的需求来说太重量级了,但是它允许你以你正在寻找的方式与你的 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");

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

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

为了更多的 资料及下载

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);

In order to be correctly parsed you just have to know if you are parsing an array or an object.

最简单的选择是 Jackson:

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

还有其他类似的简单使用库(Gson 已经提到过) ; 但是一些选择更费力,比如最初的 org.json 库,它要求您创建中间的“ JSONObject”,即使您不需要这些。

你可以很容易地做到这一点与谷歌 GSON。

假设您有一个名为 User 的类,该类的字段为 User、 width 和 height,并且您希望将以下 json 字符串转换为 User 对象。

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

您可以使用以下代码轻松地完成这项工作,而不必进行强制转换(请记住 nimcap 的注释;) :

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

其中 jsonString 是上面的 JSON String。

欲了解更多信息,请查看 https://code.google.com/p/google-gson/

JSON IO 是将 JSON 字符串或 JSON 输入流转换为 Java 对象的最简单方法

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

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

Use google GSON library for this

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

只需使用下面的 JsonString.在 java 中创建一个 Json 对象

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

if the above is your Json string , just create a Json Object with it.

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"));

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

我建议 Gson 现在托管在: https://github.com/google/gson

If performance is your issue you can have a look at some benchmarks http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/ which compare.

Like many stated already, A pretty simple way to do this using JSON.simple as below

import org.json.JSONObject;


String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);

然后使用 jsonObj 处理 JSON 对象

根据下面的链接,JSON.simple 对于小型和大型 JSON 文件都显示了恒定的效率

Http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

Jackson 用于处理大文件,GSON用于处理小文件,JSON.Simple用于处理两者。