如何在Java中将jsonString转换为JSONObject

Mr.*_*ikh 388 java arrays parsing json

我有一个名为String的变量jsonString:

{"phonetype":"N95","cat":"WP"}
Run Code Online (Sandbox Code Playgroud)

现在我想将其转换为JSON对象.我在Google上搜索得更多,但没有得到任何预期的答案......

dog*_*ane 638

使用org.json库:

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

  • 使用google-gson你可以这样做:`JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();` (62认同)
  • 他得到了一个错误,因为他没有使用org.json,他使用google-gson这种方式不起作用. (27认同)
  • 我试过像JSONObject js = new JSONObject(jsonstring); 但它显示错误.在jsonstring上 (7认同)
  • @dogbane如果我不知道字符串的结构怎么办?更清楚的是,如何将动态生成的jsonString转换为jsonObject? (3认同)
  • @Gubatron谢谢老兄,你说得对,我刚刚下载了它,然后制作jar,现在它的工作正常. (2认同)
  • 这将导致未处理的异常错误,记得使用`try {// above code} catch(JSONException e){//自定义代码} (2认同)

Map*_*pan 150

对于仍在寻找答案的人:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
Run Code Online (Sandbox Code Playgroud)

  • 你能否提一下导入哪个包? (18认同)
  • 这对我有用:`import org.json.simple.JSONObject` (9认同)
  • JSONParser解析器=新的JSONParser(); 似乎很卑鄙 (4认同)
  • json-simple 的 1.1.1 版本似乎有一些问题。上面给出了`parser.parse(` 的“未处理的异常”,并希望尝试捕获或抛出。但是当你添加任何一个时,它会给出一个`未处理的异常类型 ParseException` 错误,或者`org.json 的 ParseException 的 NoClassDefFound 错误.simple.parser` 即使您在 Maven 依赖项中有 json-simple 并且在项目库中清晰可见。 (2认同)
  • org.json是一个概念验证库.它是性能和功能方面最差的之一.在选择之前,应该查看json lib的功能集和性能.看到我使用JMH做的这个基准:https://github.com/fabienrenaud/java-json-benchmark它清楚地显示杰克逊比其他任何东西都快,比org.json快5到6倍. (2认同)

kam*_*aci 43

你可以用google-gson.细节:

对象示例

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

(串行化)

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

请注意,您无法使用循环引用序列化对象,因为这将导致无限递归.

(反序列化)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj
Run Code Online (Sandbox Code Playgroud)

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);
  }

}
Run Code Online (Sandbox Code Playgroud)

产量

{"data1":100,"data2":"hello"}
Run Code Online (Sandbox Code Playgroud)

资源:

Google Gson Project主页

Gson用户指南


T.J*_*der 37

JSON主页中链接了各种Java JSON序列化程序和反序列化程序.

在撰写本文时,有以下20个:

......但当然列表可以改变.


小智 24

Java 7解决方案

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
Run Code Online (Sandbox Code Playgroud)

;

  • 这个库的性能最差.看看我用JMH做的这个基准:https://github.com/fabienrenaud/java-json-benchmark (5认同)

小智 11

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

例子:

JsonObject jsonObject = JsonParser.parseString(jsonString).getAsJsonObject();
System.out.println(jsonObject.get("phonetype"));
System.out.println(jsonObject.get("cat"));
Run Code Online (Sandbox Code Playgroud)


Gub*_*ron 10

我喜欢使用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);
...
Run Code Online (Sandbox Code Playgroud)

但是,我认为您的问题更像是,如何从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"));
Run Code Online (Sandbox Code Playgroud)

我认为google-gson的美妙之处在于你不需要处理JSONObject.你只需抓住json,传递类就想要反序列化,你的类属性将与JSON匹配,但是再一次,每个人都有自己的要求,也许你无法负担得到预先映射的类的奢侈反序列化的一面,因为JSON Generating方面的东西可能过于动态.在这种情况下,只需使用json.org.


Cha*_*aru 10

要转换StringJSONObject你只需要将String实例传递给Constructor JSONObject.

例如:

JSONObject jsonObj = new JSONObject("your string");
Run Code Online (Sandbox Code Playgroud)


Cab*_*zas 8

你必须导入org.json

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


Yug*_*ten 7

使用Jacksonwith将字符串转换为JSONcom.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();
Run Code Online (Sandbox Code Playgroud)


Pan*_*her 5

Codehaus Jackson - 自 2012 年以来,我一直在为我的 RESTful Web 服务和 JUnit 测试使用这个很棒的 AP​​I。使用他们的 API,您可以:

(1) 将 JSON 字符串转换为 Java bean

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

(2) JSON String转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());
Run Code Online (Sandbox Code Playgroud)

(3) 将Java bean 转换为JSON String

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

参考资料:

  1. 科德豪斯杰克逊

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

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


Anz*_*ari 5

使用 org.json.simple.JSONObject 将字符串转换为 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;
}
Run Code Online (Sandbox Code Playgroud)