在 Java 中如何转换 jsonString 到 JSONObject - 如何将 JSON 字符串转换为 JSON 对象

我有字符串变量jsonString:

{"phonetype":"N95","cat":"WP"}

现在我想把它转换成 JSON 对象。我在谷歌上搜索了更多,但没有得到任何预期的答案!

1929896 次浏览

有各种Java JSON序列化器和反序列化器链接从JSON主页

在撰写本文时,有22种:

...当然,这个名单是可以改变的。

使用org.json库:

try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Error", err.toString());
}

你可以使用google-gson。细节:

对象的例子

class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}

(序列化)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json is {"value1":1,"value2":"abc"}

注意,不能用循环引用序列化对象,因为那会导致无限递归。

(反序列化)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);
==> obj2 is just like obj

Gson的另一个例子: < / >强

Gson很容易学习和实现,你需要知道的是以下两种方法:

-> toJson() -转换java对象到JSON格式

-> fromJson() -转换JSON为java对象

import com.google.gson.Gson;


public class TestObjectToJson {
private int data1 = 100;
private String data2 = "hello";


public static void main(String[] args) {
TestObjectToJson obj = new TestObjectToJson();
Gson gson = new Gson();


//convert java object to JSON format
String json = gson.toJson(obj);


System.out.println(json);
}


}

输出

{"data1":100,"data2":"hello"}

资源:

谷歌Gson项目首页

Gson用户指南 .

< a href = " http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/ " > < / >示例

我喜欢为此使用google-gson,这正是因为我不需要直接使用JSONObject。

在这种情况下,我将有一个类,将对应于JSON对象的属性

class Phone {
public String phonetype;
public String cat;
}




...
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
...

然而,我认为你的问题更像是,我如何从JSON字符串中得到一个实际的JSONObject对象。

我在看google-json api,找不到任何直接的东西 org。

. json的api,这可能是你想要使用的,如果你非常需要使用一个基本的JSONObject

http://www.json.org/javadoc/org/json/JSONObject.html

使用org.json.JSONObject(另一个完全不同的API)如果你想做一些像…

JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));

我认为google-gson的美妙之处在于您不需要处理JSONObject。你只需要获取json,传递想要反序列化的类,你的类属性就会与json匹配,但话说回来,每个人都有自己的需求,也许你不能奢侈地在反序列化端拥有预先映射的类,因为json生成端可能太动态了。在这种情况下,只需使用json.org。

如果你正在使用http://json-lib.sourceforge.net (net.sf.json.JSONObject) < / p >

这很简单:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

JSONObject json = JSONSerializer.toJSON(myJsonString);

获取值然后用

. getstring (param), json.getInt(param)等等

将字符串转换为json, sting就像json一样。{“phonetype”:“N95”,“猫”:“WP”}

String Data=response.getEntity().getText().toString(); // reading the string value
JSONObject json = (JSONObject) new JSONParser().parse(Data);
String x=(String) json.get("phonetype");
System.out.println("Check Data"+x);
String y=(String) json.get("cat");
System.out.println("Check Data"+y);

将json单个对象设置为列表 即< / p >

"locations":{


}

in到List<Location>

使用

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

jackson.mapper-asl-1.9.7.jar

必须导入org.json

JSONObject jsonObj = null;
try {
jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
} catch (JSONException e) {
e.printStackTrace();
}

对于仍在寻找答案的人:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

最好使用更简单的方法,使用org.json lib。只需要做一个非常简单的方法:

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

现在obj是你各自String的转换后的JSONObject形式。这是在有名称-值对的情况下。

对于字符串,可以直接传递给JSONObject的构造函数。如果它是一个有效的json String,那么ok,否则它会抛出异常。

java7解决方案

import javax.json.*;


...


String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

要将String转换为JSONObject,只需要将String实例传递给JSONObject的构造函数。

例如:

JSONObject jsonObj = new JSONObject("your string");

使用fastxmljsonnode进行通用Json解析。它在内部为所有输入创建键值的Map。

例子:

private void test(@RequestBody JsonNode node)

输入字符串:

{"a":"b","c":"d"}

注意,反序列化接口的GSON将导致如下异常。

"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

而反序列化;GSON不知道该接口需要调用哪个对象。

这以某种方式解决在这里

然而,FlexJSON本身就有这个解决方案。而序列化时间,它是添加类名作为json的一部分,如下所示。

{
"HTTPStatus": "OK",
"class": "com.XXX.YYY.HTTPViewResponse",
"code": null,
"outputContext": {
"class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
"eligible": true
}
}

JSON会有些麻烦;但是你不需要写GSON中要求的InstanceCreator

不需要使用任何外部库。

你可以使用这个类代替:)(处理偶数列表,嵌套列表和json)

public class Utility {


public static Map<String, Object> jsonToMap(Object json) throws JSONException {


if(json instanceof JSONObject)
return _jsonToMap_((JSONObject)json) ;


else if (json instanceof String)
{
JSONObject jsonObject = new JSONObject((String)json) ;
return _jsonToMap_(jsonObject) ;
}
return null ;
}




private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
Map<String, Object> retMap = new HashMap<String, Object>();


if(json != JSONObject.NULL) {
retMap = toMap(json);
}
return retMap;
}




private static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();


Iterator<String> keysItr = object.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Object value = object.get(key);


if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}


else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
}
return map;
}




public static List<Object> toList(JSONArray array) throws JSONException {
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.length(); i++) {
Object value = array.get(i);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}


else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
list.add(value);
}
return list;
}
}

要转换你的JSON字符串到hashmap,使用这个:

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(

字符串转换成JSON使用Jacksoncom.fasterxml.jackson.databind:

假设你的json-string表示如下:jsonString = {"phonetype":"N95","cat":"WP"}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* Simple code exmpl
*/
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonString);
String phoneType = node.get("phonetype").asText();
String cat = node.get("cat").asText();

使用org.json

如果你有一个包含JSON格式文本的字符串,那么你可以通过以下步骤获取JSON对象:

String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(jsonString);
} catch (JSONException e) {
e.printStackTrace();
}

现在访问phonetype

Sysout.out.println(jsonObject.getString("phonetype"));

Codehaus杰克逊 -自2012年以来,我一直是这个很棒的API,用于我的RESTful webservice和JUnit测试。使用它们的API,你可以:

(1)转换JSON字符串到Java bean

public static String beanToJSONString(Object myJavaBean) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.writeValueAsString(myJavaBean);
}

(2)将JSON字符串转换为JSON对象(JsonNode)

public static JsonNode stringToJSONObject(String jsonString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readTree(jsonString);
}


//Example:
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
JsonNode jsonNode = stringToJSONObject(jsonString);
Assert.assertEquals("Phonetype value not legit!", "N95", jsonNode.get("phonetype").getTextValue());
Assert.assertEquals("Cat value is tragic!", "WP", jsonNode.get("cat").getTextValue());

(3)转换Java bean到JSON字符串

    public static Object JSONStringToBean(Class myBeanClass, String JSONString) throws Exception {
ObjectMapper jacksonObjMapper = new ObjectMapper();
return jacksonObjMapper.readValue(JSONString, beanClass);
}

参考文献:

  1. Codehaus Jackson

  2. JsonNode API -如何使用,导航,解析和评估来自JsonNode对象的值

  3. 教程 -简单教程如何使用Jackson将JSON字符串转换为JsonNode

使用org.json.simple.JSONObject将String转换为Json对象

private static JSONObject createJSONObject(String jsonString){
JSONObject  jsonObject=new JSONObject();
JSONParser jsonParser=new  JSONParser();
if ((jsonString != null) && !(jsonString.isEmpty())) {
try {
jsonObject=(JSONObject) jsonParser.parse(jsonString);
} catch (org.json.simple.parser.ParseException e) {
e.printStackTrace();
}
}
return jsonObject;
}

那些因为弃用问题而没有从发布的答案中找到解决方案的人,可以使用com.google.gson中的JsonParser

例子:

JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject();
System.out.println(jsonObject.get("phonetype"));
System.out.println(jsonObject.get("cat"));