How to convert jsonString to JSONObject in Java
我有一个名为
1 | {"phonetype":"N95","cat":"WP"} |
现在我想将其转换为JSON对象。 我在Google上搜索得更多,但没有得到任何预期的答案......
使用org.json库:
1 2 3 4 5 | try { JSONObject jsonObject = new JSONObject("{"phonetype":"N95","cat":"WP"}"); }catch (JSONException err){ Log.d("Error", err.toString()); } |
对于仍在寻找答案的人:
1 2 | JSONParser parser = new JSONParser(); JSONObject json = (JSONObject) parser.parse(stringToParse); |
您可以使用
对象示例
1 2 3 4 5 6 7 8 | class BagOfPrimitives { private int value1 = 1; private String value2 ="abc"; private transient int value3 = 3; BagOfPrimitives() { // no-args constructor } } |
(串行化)
1 2 3 4 | BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); String json = gson.toJson(obj); ==> json is {"value1":1,"value2":"abc"} |
请注意,您无法使用循环引用序列化对象,因为这将导致无限递归。
(反序列化)
1 2 | BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class); ==> obj2 is just like obj |
Gson的另一个例子:
Gson易于学习和实现,您需要知道以下两种方法:
- > toJson() - 将java对象转换为JSON格式
- > fromJson() - 将JSON转换为java对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); } } |
产量
1 | {"data1":100,"data2":"hello"} |
资源:
Google Gson Project主页
Gson用户指南
例
JSON主页中链接了各种Java JSON序列化程序和反序列化程序。
在撰写本文时,有以下22个:
- JSON-java.
- JSONUtil.
- jsonp.
- Json-lib.
- Stringtree.
- SOJO.
- json-taglib.
- Flexjson.
- Argo.
- jsonij.
- fastjson.
- mjson.
- jjson.
- json-simple.
- json-io.
- google-gson.
- FOSS Nova JSON.
- Corn CONVERTER.
- Apache johnzon.
- Genson.
- cookjson.
- progbase.
......但当然列表可以改变。
Java 7解决方案
1 2 3 4 5 6 | import javax.json.*; ... String TEXT; JsonObject body = Json.createReader(new StringReader(TEXT)).readObject() |
;
我喜欢使用google-gson,这正是因为我不需要直接使用JSONObject。
在这种情况下,我有一个类将对应于您的JSON对象的属性
1 2 3 4 5 6 7 8 9 10 11 |
但是,我认为您的问题更像是,如何从JSON字符串中获取实际的JSONObject对象。
我正在看google-json api并且找不到任何直截了当的东西
org.json的api,如果你非常需要使用准系统JSONObject,那么你可能正在使用它。
http://www.json.org/javadoc/org/json/JSONObject.html
使用org.json.JSONObject(另一个完全不同的API)如果你想做类似......
1 2 | JSONObject jsonObject = new JSONObject("{"phonetype":"N95","cat":"WP"}"); System.out.println(jsonObject.getString("phonetype")); |
我认为google-gson的美妙之处在于你不需要处理JSONObject。你只需抓住json,传递类就想要反序列化,你的类属性将与JSON匹配,但是再一次,每个人都有自己的要求,也许你无法负担得到预先映射的类的奢侈反序列化的一面,因为JSON Generating方面的东西可能过于动态。在这种情况下,只需使用json.org。
要将
例如:
1 | JSONObject jsonObj = new JSONObject("your string"); |
你必须导入org.json
1 2 3 4 5 6 | JSONObject jsonObj = null; try { jsonObj = new JSONObject("{"phonetype":"N95","cat":"WP"}"); } catch (JSONException e) { e.printStackTrace(); } |
使用带有
假设你的json-string代表如下:jsonString = {"phonetype":"N95","cat":"WP"}
1 2 3 4 5 6 7 8 9 | 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(); |
使用fastxml的JsonNode进行Generic Json Parsing。它在内部为所有输入创建键值的Map。
例:
1 | private void test(@RequestBody JsonNode node) |
输入字符串:
1 | {"a":"b","c":"d"} |
如果您使用的是http://json-lib.sourceforge.net
(net.sf.json.JSONObject)
这很简单:
1 2 |
要么
1 | JSONObject json = JSONSerializer.toJSON(myJsonString); |
然后获取值
json.getString(param),json.getInt(param)等。
将字符串转换为json,sting就像json。 {"PHONETYPE":"N95","猫":"WP"}
1 2 3 4 5 6 |
无需使用任何外部库。
你可以使用这个类:)(处理偶数列表,嵌套列表和json)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | 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,请使用以下命令:
1 |
使用org.json
如果您有一个包含JSON格式文本的String,那么您可以通过以下步骤获取JSON Object:
1 2 3 4 5 6 7 | String jsonString ="{"phonetype":"N95","cat":"WP"}"; JSONObject jsonObj = null; try { jsonObj = new JSONObject(jsonString); } catch (JSONException e) { e.printStackTrace(); } |
现在访问phonetype
1 | Sysout.out.println(jsonObject.getString("phonetype")); |
用于将json单个对象设置为列表
即
1 2 3 | "locations":{ } |
在
使用
1 2 | ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); |
jackson.mapper-ASL-1.9.7.jar
请注意,使用反序列化接口的GSON将导致异常,如下所示。
1 | "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的一部分添加,如下所示。
1 2 3 4 5 6 7 8 9 | { "HTTPStatus":"OK", "class":"com.XXX.YYY.HTTPViewResponse", "code": null, "outputContext": { "class":"com.XXX.YYY.ZZZ.OutputSuccessContext", "eligible": true } } |
所以JSON会有些麻烦;但是你不需要在GSON中写入
使用
1 2 3 | JSONObject obj = new JSONObject(); obj.put("phonetype","N95"); obj.put("cat","WP"); |
现在
对于字符串,您可以直接传递给