我有一个名为jsonString的字符串变量:

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

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


当前回答

java7解决方案

import javax.json.*;

...

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

;

其他回答

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

例子:

private void test(@RequestBody JsonNode node)

输入字符串:

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

使用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;
}

Codehaus Jackson -自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);
}

参考文献:

Codehaus杰克逊 JsonNode API——如何使用、导航、解析和计算来自JsonNode对象的值 教程-简单的教程,如何使用Jackson将JSON字符串转换为JsonNode

用于设置json单一对象为列表 即

"locations":{

}

in to List<Location>

use

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

jackson.mapper-asl-1.9.7.jar

我喜欢为此使用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。