第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果我在解析之前不知道所有 json 字段,如何將 JSON 轉(zhuǎn)換為 Java 對象?

如果我在解析之前不知道所有 json 字段,如何將 JSON 轉(zhuǎn)換為 Java 對象?

有只小跳蛙 2023-10-12 14:38:47
我的服務(wù)可以接收幾種不同的json,例如:{   "event":"conversation_started",   "context":"context information",   "user":{      "id":"01234567890A=",      "name":"John McClane",      "avatar":"http://avatar.example.com",      "country":"UK",      "language":"en",      "api_version":1   },   "subscribed":false}或者 {   "event":"message",   "message":{      "type":"text",      "text":"a message to the service",      "location":{         "lat":12.34,         "lon":12.34      }   }}或其他幾個(gè) json。所有 json 中唯一相同的字段是“event”。所有其他字段都可以不同(取決于“事件”值)。所以問題是:如何將這些 json 轉(zhuǎn)換為 java 對象(而不制作混亂的代碼)?我知道的唯一方法是手動(dòng)檢查“事件”值(例如,json.startsWith("{\n\"event\":\"message\"")但我確信這樣做有任何簡單的決定。
查看完整描述

3 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

我的服務(wù)可以接收幾種不同的json,例如:


{

   "event":"conversation_started",

   "context":"context information",

   "user":{

      "id":"01234567890A=",

      "name":"John McClane",

      "avatar":"http://avatar.example.com",

      "country":"UK",

      "language":"en",

      "api_version":1

   },

   "subscribed":false

}

或者


 {

   "event":"message",

   "message":{

      "type":"text",

      "text":"a message to the service",

      "location":{

         "lat":12.34,

         "lon":12.34

      }

   }

}

或其他幾個(gè) json。所有 json 中唯一相同的字段是“event”。所有其他字段都可以不同(取決于“事件”值)。


所以問題是:如何將這些 json 轉(zhuǎn)換為 java 對象(而不制作混亂的代碼)?我知道的唯一方法是手動(dòng)檢查“事件”值(例如,json.startsWith("{\n\"event\":\"message\"")但我確信這樣做有任何簡單的決定。


查看完整回答
反對 回復(fù) 2023-10-12
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

UPD:如果您不想通過聲明 POJO 將 JSON 字符串轉(zhuǎn)換為 JAVA 對象,您可以將其解析為JSONObject(com.alibaba.fastjson.JSONObject)


public class Event {


    public static void main(String[] args) {

        String jsonA = "{\"event\":\"conversation_started\",\"context\":\"context information\",\"user\":{\"id\":\"01234567890A=\",\"name\":\"John McClane\",\"avatar\":\"http://avatar.example.com\",\"country\":\"UK\",\"language\":\"en\",\"api_version\":1},\"subscribed\":false}";

        String jsonB = "{\"event\":\"message\",\"message\":{\"type\":\"text\",\"text\":\"a message to the service\",\"location\":{\"lat\":12.34,\"lon\":12.34}}}";


        JSONObject jsonObject = JSONObject.parseObject(jsonA);

        String event = jsonObject.getString("event");

        if (event.equals("message")) {

            //do what you want to do

            System.out.println("message event......");

        } else if ("conversation_started".equals(event)) {

            System.out.println("context information event......");

        }

    }

}

如下聲明一個(gè)類Event,然后將 JSON String 轉(zhuǎn)換為EventJAVA 對象。


@Data

public class Event {

    private String event;

    private String context;

    private User user;

    private boolean subscribed;

    private Message message;


    @Data

    public static class User {

        private String id;

        private String name;

        private String avatar;

        private String country;

        private String language;

        private int api_version;

    }


    @Data

    public static class Message {

        private String type;

        private String text;

        private Location location;


        @Data

        public static class Location {

            private double lat;

            private double lon;

        }

    }


    public static void main(String[] args) {

        String jsonA = "{\"event\":\"conversation_started\",\"context\":\"context information\",\"user\":{\"id\":\"01234567890A=\",\"name\":\"John McClane\",\"avatar\":\"http://avatar.example.com\",\"country\":\"UK\",\"language\":\"en\",\"api_version\":1},\"subscribed\":false}";

        String jsonB = "{\"event\":\"message\",\"message\":{\"type\":\"text\",\"text\":\"a message to the service\",\"location\":{\"lat\":12.34,\"lon\":12.34}}}";


        ObjectMapper objectMapper = new ObjectMapper();

        try {

            Event eventA = objectMapper.readValue(jsonA, new TypeReference<Event>() {

            });

            System.out.println(objectMapper.writeValueAsString(eventA));


            Event eventB = objectMapper.readValue(jsonB, new TypeReference<Event>() {

            });

            System.out.println(objectMapper.writeValueAsString(eventB));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}


查看完整回答
反對 回復(fù) 2023-10-12
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

使用 JSON 對象。這是動(dòng)態(tài)的,可以加載任何 json。然后你就可以一致地引用事件字段


實(shí)施例1


 //import java.util.ArrayList;

 //import org.bson.Document;



 Document root = Document.parse("{ \"event\" : \"conversation_started\", \"context\" : \"context information\", \"user\" : { \"id\" : \"01234567890A=\", \"name\" : \"John McClane\", \"avatar\" : \"http://avatar.example.com\", \"country\" : \"UK\", \"language\" : \"en\", \"api_version\" : 1 }, \"subscribed\" : false }");


 System.out.println(((String)root.get("event")));

實(shí)施例2


 //import java.util.ArrayList;

 //import org.bson.Document;



 Document root = Document.parse("{ \"event\" : \"message\", \"message\" : { \"type\" : \"text\", \"text\" : \"a message to the service\", \"location\" : { \"lat\" : 12.34, \"lon\" : 12.34 } } }");


 System.out.println(((String)root.get("event")));


查看完整回答
反對 回復(fù) 2023-10-12
  • 3 回答
  • 0 關(guān)注
  • 138 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)