如何将string转换为Java中的JSONObject
我有一个名为jsonString
stringvariables:
{"phonetype":"N95","cat":"WP"}
现在我想把它转换成JSON对象。 我在Google上search的更多,但没有得到任何预期的答案…
使用org.json库:
JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
任何人仍然在寻找答案:
JSONParser parser = new JSONParser(); JSONObject json = (JSONObject) parser.parse(stringToParse);
你可以用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"}
请注意,您不能序列化具有循环引用的对象,因为这将导致无限recursion。
(反序列化)
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用户指南
例
有许多从JSON主页链接的Java JSON序列化器和反序列化器。
在写这篇文章时,有这20个:
- org.json
- org.json.me
- jacksonJSON处理器
- JSON-LIB
- JSON工具
- JSON-简单
- Stringtree
- SOJO
- 的Restlet
- 抛弃
- JSON-标签库
- XStream的
- JsonMarshaller
- Flexjson
- JON工具
- 谷歌,GSON
- 阿尔戈
- 枢
- jsonij
- FASTJSON
…但当然这个列表可以改变。
Java 7解决scheme
import javax.json.*; ... String TEXT; JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
我喜欢使用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); ...
不过,我认为你的问题更像是,如何最终从一个JSONstring实际的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"));
我认为谷歌GSON的美是你不需要处理JSONObject。 你只需要抓住json,将类传递给想要反序列化的类,而你的类属性将会与JSON匹配,但是再次,每个人都有自己的需求,也许你不能奢侈地预先映射类反序列化的一面,因为事情可能在JSON生成方面太dynamic。 在这种情况下,只需使用json.org。
如果您使用http://json-lib.sourceforge.net (net.sf.json.JSONObject)
这很容易:
String myJsonString; JSONObject json = JSONObject.fromObject(myJsonString);
要么
JSONObject json = JSONSerializer.toJSON(myJsonString);
然后用json.getString(param),json.getInt(param)等等获取值。
要将String
转换为JSONObject
,只需要将String
实例传递给JSONObject
构造函数。
例如:
JSONObject jsonObj = new JSONObject("your string");
你必须导入org.json
JSONObject jsonObj = null; try { jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); } catch (JSONException e) { e.printStackTrace(); }
为通用Jsonparsing使用fasterxml的JsonNode。 它在内部为所有input创build一个键值的映射。
例:
private void test(@RequestBody JsonNode node)
inputstring:
{"a":"b","c":"d"}
将一个string转换为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单个对象列表即
"locations":{ }
进入List<Location>
使用
ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
jackson.mapper-ASL-1.9.7.jar
注意,反序列化接口的GSON会导致如下的exception。
"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不知道哪个对象需要为该接口进行types化。
这在某种程度上解决了 。
不过FlexJSON本身就有这个解决scheme。 而序列化的时间是像下面的JSON的一部分添加类名称。
{ "HTTPStatus": "OK", "class": "com.XXX.YYY.HTTPViewResponse", "code": null, "outputContext": { "class": "com.XXX.YYY.ZZZ.OutputSuccessContext", "eligible": true } }
所以JSON将会减less一些; 但是您不需要编写GSON中所需的InstanceCreator。
更好使用org.json
lib更简单的方法。 只要做一个非常简单的方法如下:
JSONObject obj = new JSONObject(); obj.put("phonetype", "N95"); obj.put("cat", "WP");
现在, obj
是您的各自String的转换JSONObject
forms。 这是如果你有名称 – 值对。
对于一个string,你可以直接传递给JSONObject
的构造函数。 如果这将是一个有效的json String
,那么好吧,否则会抛出一个exception。