【问题标题】:Convert JSON string to json objects将 JSON 字符串转换为 json 对象
【发布时间】:2019-08-27 05:19:42
【问题描述】:

我有一个 json 字符串返回:

[{"TRAIN_JOURNEY_STAFF[],"ID":15,"EMAIL_ADDRESS":"jk@connectedrail.com","PASSWORD":"test","FIRST_NAME":"Joe","LAST_NAME":"Kevin","DATE_OF_BIRTH":"1996-04-20T00:00:00","GENDER":"Male","STAFF_ROLE":"Conductor","PHOTO":null},{new record..}]

这里有几条记录,我找不到将这个json字符串转换为单个对象的方法。我正在使用以下内容来读取数据:

StringBuffer response;
    try (BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()))) {
        String inputLine;
        response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
    }
    System.out.print(response.toString());
}

我尝试了简单的 json 库,但解析器混淆了字符串,这并不理想,因为我需要将数据逐个对象输出到行对象到 jtables。

任何帮助将不胜感激。

使用 GSON 解决了​​以下问题。非常感谢大家!

    JsonElement jelement = new JsonParser().parse(response.toString());
    JsonArray jarray = jelement.getAsJsonArray();

    JsonObject jobject = jarray.get(0).getAsJsonObject();

    System.out.println(jobject.get("FIRST_NAME"));

【问题讨论】:

  • "TRAIN_JOURNEY_STAFF[] 看起来有问题.. 应该是"TRAIN_JOURNEY_STAFF":[]
  • 使用JSON.parse(myObj) 将简单的json 字符串转换为json。不需要任何额外的库。然而,正如@JackFlamp 提到的,那个 json 看起来格式不正确
  • 是的,这很奇怪,它是我通过 GET 从数据库中获得的响应
  • 要在 Java 中解析 JSON,请阅读 stackoverflow.com/questions/2591098/how-to-parse-json-in-java。但是你所拥有的不是 JSON,所以这无济于事。您应该专注于确定为什么您拥有的不是 JSON,而不是尝试解析它。

标签: java json


【解决方案1】:

你所拥有的基本上是这样的:

[
  {
  "TRAIN_JOURNEY_STAFF":[
  ],
  "ID":15,
  "EMAIL_ADDRESS":"jk@connectedrail.com",
  "PASSWORD":"test",
  "FIRST_NAME":"Joe",
  "LAST_NAME":"Kevin",
  "DATE_OF_BIRTH":"1996-04-20T00:00:00",
  "GENDER":"Male",
  "STAFF_ROLE":"Conductor",
  "PHOTO":null
  },
  {

  }
]

您可以使用 JSON 构造函数将此数组序列化为 JSONObjects 数组。 尝试在 Java 中查找 JSONObjectJSONArray 类。 构造函数基本上采用字符串化的 JSON(您已经拥有)。

【讨论】:

    【解决方案2】:

    你可以这样使用:

    public class ObjectSerializer {
    
    private static ObjectMapper objectMapper;
    
    @Autowired
    public ObjectSerializer(ObjectMapper objectMapper) {
        ObjectSerializer.objectMapper = objectMapper;
    }
    
    public static <T> T getObject(Object obj, Class<T> class1) {
        String jsonObj = "";
        T userDto = null;
        try {
            jsonObj = objectMapper.writeValueAsString(obj);
            userDto = (T) objectMapper.readValue(jsonObj, class1);
            System.out.println(jsonObj);
        } catch (JsonProcessingException jpe) {
        } catch (IOException e) {
            e.printStackTrace();
        }
        return userDto;
    }
    

    将您的 JSON 对象传递给此方法,并使用类名进行登录,它将 JSON 数据设置为相应的类。

    注意: 类必须具有与您要映射的 JSON 中相同的变量。

    【讨论】:

      【解决方案3】:

      使用 org.json 库:

      JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
      

      this

      【讨论】:

        【解决方案4】:

        您可以使用 Jackson 将 JSON 转换为对象。包含依赖项:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.3</version>
        </dependency>
        

        然后创建一个 POJO 类来存储 JSON。pojo 类应该反映 json 字符串结构,并且应该有适当的字段来映射值(示例代码中的 Staff.class 是一个 pojo 类)。然后,通过使用 ObjectMapper类,您可以将 JSON 字符串转换为 java 对象,如下所示:

        StringBuffer response;
            try (BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()))) {
                String inputLine;
                response = new StringBuffer();
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
            }
            System.out.print(response.toString());
        
          ObjectMapper mapper = new ObjectMapper();
        
          //JSON from file to Object
          Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);
        
          //JSON from String to Object 
          Staff obj = mapper.readValue(response.toString(), Staff.class);
        

        另一个简单的方法读取 JSON 字符串并将其转换为对象是:

        JSON 字符串:

        {
             "lastName":"Smith",
            "address":{
                "streetAddress":"21 2nd Street",
                 "city":"New York",
                 "state":"NY",
                 "postalCode":10021
            },
             "age":25,
             "phoneNumbers":[
                    {
                    "type":"home", "number":"212 555-1234"
                    },
                 {
                    "type":"fax", "number":"212 555-1234"
                 }
             ],
             "firstName":"John"
        }
        
        public class JSONReadExample  
        { 
            public static void main(String[] args) throws Exception  
            { 
                // parsing file "JSONExample.json" 
                Object obj = new JSONParser().parse(new FileReader("JSONExample.json")); 
        
                // typecasting obj to JSONObject 
                JSONObject jo = (JSONObject) obj; 
        
                // getting firstName and lastName 
                String firstName = (String) jo.get("firstName"); 
                String lastName = (String) jo.get("lastName"); 
        
                System.out.println(firstName); 
                System.out.println(lastName); 
        
                // getting age 
                long age = (long) jo.get("age"); 
                System.out.println(age); 
        
                // getting address 
                Map address = ((Map)jo.get("address")); 
        
                // iterating address Map 
                Iterator<Map.Entry> itr1 = address.entrySet().iterator(); 
                while (itr1.hasNext()) { 
                    Map.Entry pair = itr1.next(); 
                    System.out.println(pair.getKey() + " : " + pair.getValue()); 
                } 
        
                // getting phoneNumbers 
                JSONArray ja = (JSONArray) jo.get("phoneNumbers"); 
        
                // iterating phoneNumbers 
                Iterator itr2 = ja.iterator(); 
        
                while (itr2.hasNext())  
                { 
                    itr1 = ((Map) itr2.next()).entrySet().iterator(); 
                    while (itr1.hasNext()) { 
                        Map.Entry pair = itr1.next(); 
                        System.out.println(pair.getKey() + " : " + pair.getValue()); 
                    } 
                } 
            } 
        } 
        

        供参考:
        https://www.geeksforgeeks.org/parse-json-java/
        https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

        【讨论】:

          猜你喜欢
          • 2020-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-03
          • 2018-05-03
          • 2011-04-23
          • 2012-06-14
          • 2012-02-20
          相关资源
          最近更新 更多