Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaME中将JSON字符串转换为对象?_Java_Json_Java Me_Serialization - Fatal编程技术网

在JavaME中将JSON字符串转换为对象?

在JavaME中将JSON字符串转换为对象?,java,json,java-me,serialization,Java,Json,Java Me,Serialization,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库?您有很多: JSONObject是名称/值对的无序集合

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

您有很多:


  • JSONObject是名称/值对的无序集合。它的外部形式是一个用大括号括起来的字符串,名称和值之间用冒号,值和名称之间用逗号。内部表单是一个对象,它具有get()和opt()方法,用于按名称访问值,以及put()方法,用于按名称添加或替换值。这些值可以是以下任何类型:Boolean、JSONArray、JSONObject、Number和String,或者JSONObject.NULL对象


  • JSONArray是一个有序的值序列。它的外部形式是一个用方括号括起来的字符串,值之间有逗号。内部表单是一个对象,它具有get()和opt()方法,用于通过索引访问值,以及put()方法,用于添加或替换值。这些值可以是以下任何类型:Boolean、JSONArray、JSONObject、Number和String,或者JSONObject.NULL对象


  • JSONString是一种快速生成JSON文本的工具


  • JSONWriter是一种用于将JSON文本快速写入流的工具


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


  • 当检测到语法或过程错误时,会引发JSONException


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

除此之外,您还可以使用javacc实现自己的解析器,并匹配您的个人语法/模式。
在我的博客上看到这个注释:

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

该库非常小,因此非常适合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上

我不知道它在J2ME上是否有效。因为它使用Java反射来创建代理,所以我认为它不会工作。另外,它目前对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");

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

要将json转换为java对象,请使用:
fromJson(jsonObject,javaclassname.class)

要将java对象转换为json对象,请使用:
toJson(javaObject)

其余部分将自动完成

有关更多信息,请参见。它提供了可以与Java一起使用的各种库,我个人使用过这个库,它是该站点中工作的一个实现,因此它在这方面具有完全相同的类-方法等

如果你点击那里的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);
为了正确解析,您只需知道是解析数组还是对象

最简单的选择是:


还有其他类似的易于使用的库(Gson已经提到);但有些选择更费力,比如原始的org.json库,它要求您创建中间的“JSONObject”,即使您不需要它们。

您可以使用Google GSON轻松做到这一点

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

{“名称”:“MyNode”,“宽度”:200,“高度”:100}

您可以使用以下代码轻松地执行此操作,而无需强制转换(记住nimcap的注释;):

Gson gson = new Gson(); 
final User user = gson.fromJson(jsonString, User.class);
其中jsonString是上面的JSON字符串


有关更多信息,请查看

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

字符串到Java对象
objectobj=JsonReader.jsonToJava(“[\”你好,世界\“]”)

使用谷歌图书馆进行此操作

public static <T> T getObject(final String jsonString, final Class<T> objectClass) {  
    Gson gson = new Gson();  
    return gson.fromJson(jsonString, objectClass);  
}
publicstatict getObject(最终字符串jsonString,最终类objectClass){
Gson Gson=新的Gson();
返回gson.fromJson(jsonString,objectClass);
}

只需使用以下Json字符串在java中创建一个Json对象

{name:"MyNode", width:200, height:100}
如果上面是Json字符串,只需使用它创建一个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"));

这是一个古老的问题,JSON Simple()可能是一个很好的解决方案,但是请考虑一下这个项目似乎暂时不活跃!p> 我建议Gson现在位于:


如果性能是您的问题,那么您可以查看一些比较基准。

与前面提到的许多基准一样,使用JSON.simple实现这一点的方法非常简单,如下所示

import org.json.JSONObject;

String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);
然后使用jsonObj处理JSON对象。e、 g jsonObj.get(“名称”)

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


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

如果J2ME有java.io.IOException;java.io.Writer;java.lang.reflect.Field;java.lang.reflect.Modifier;java.lang.reflect.Method;java.util.Collection;java.util.HashMap;java.util.Iterator;java.util.Map;java.util.TreeSet;,然后你可以用
import org.json.JSONObject;

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