如何从 java SpringBoot 中的 json 中删除“nameValuePairs”键?

问题描述 投票:0回答:2

我有以下方法,当接收到字符串中的 xml 时,将其转换为 CitiMarketSSAEvent

类型的对象
public CitiMarketSSAEvent convertXmlToObject(String xml){
    CitiMarketSSAEvent citiMarket = null;
    
    JAXBContext jaxbContext =     JAXBContext.newInstance(CitiMarketSSAEvent.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    StringReader reader = new StringReader(xml);
    citiMarket = (CitiMarketSSAEvent) unmarshaller.unmarshal(reader);
    return citiMarket;
}

然后我有以下方法将该类的对象转换为 json

public String convertObjectToJson(CitiMarketSSAEvent citiMarketObject) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setPrettyPrinting();
    gsonBuilder.disableHtmlEscaping();

    Gson gson = gsonBuilder.create();
    return gson.toJson(citiMarketObject, CitiMarketSSAEvent.class);
}

它绘制 json 如下

{
    "header":{
        "name": "transactionCount",
        "version": "2.0",
        "code": "1530",
        "country": "MX",
        "domain": "counts",
        "time": "2018-10-11 11:20:34.323 GMT",
    },
    "body":{
        "INPUNT": "I",
        "MESSAGE_01": "RSTW",
        "MESSAGE_02": "MNXTYP",
        "MESSAGE_03": "RSTWERDCV",
        "SEND_TIME": "20-NOV-2011 04:53:04 p.m.",
        "RCV_ID": "ABGRCV",
        "FORMAT0_MONTO": "200,000,300.00",
        "FORMATO_MONEDA": "USD",
        "CONTROL_01": "MSG1RCVSND",
        "CONTROL_02": "MSG2RCVSND",
        "CONTROL_03": "MSG3RCVSND",
    }
}

但我想以这样的方式将“事件”键添加到 json 中:

{
 "event":{
    "header":{
        "name": "transactionCount",
        "version": "2.0",
        "code": "1530",
        "country": "MX",
        "domain": "counts",
        "time": "2018-10-11 11:20:34.323 GMT",
    },
    "body":{
        "INPUNT": "I",
        "MESSAGE_01": "RSTW",
        "MESSAGE_02": "MNXTYP",
        "MESSAGE_03": "RSTWERDCV",
        "SEND_TIME": "20-NOV-2011 04:53:04 p.m.",
        "RCV_ID": "ABGRCV",
        "FORMAT0_MONTO": "200,000,300.00",
        "FORMATO_MONEDA": "USD",
        "CONTROL_01": "MSG1RCVSND",
        "CONTROL_02": "MSG2RCVSND",
        "CONTROL_03": "MSG3RCVSND",
    }
  }
}

然后我使用 JSONObject

如下修改我的方法
public String convertObjectToJson(CitiMarketSSAEvent citiMarketObject) {
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.setPrettyPrinting();
        gsonBuilder.disableHtmlEscaping();
        
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("event",citiMarketObject);
        
        Gson gson = gsonBuilder.create();
        return gson.toJson(jsonObj, JSONObject.class);                                            
  }

它向我抛出 json,但添加了键“nameValuePairs”,如何删除它?或者我还能怎么做才能添加“事件”键?

 {
    "nameValuePairs":{
        "event":{
            "header":{
                "name": "transactionCount",
                "version": "2.0",
                "code": "1530",
                "country": "MX",
                "domain": "counts",
                "time": "2018-10-11 11:20:34.323 GMT",
            },
            "body":{
                "INPUNT": "I",
                "MESSAGE_01": "RSTW",
                "MESSAGE_02": "MNXTYP",
                "MESSAGE_03": "RSTWERDCV",
                "SEND_TIME": "20-NOV-2011 04:53:04 p.m.",
                "RCV_ID": "ABGRCV",
                "FORMAT0_MONTO": "200,000,300.00",
                "FORMATO_MONEDA": "USD",
                "CONTROL_01": "MSG1RCVSND",
                "CONTROL_02": "MSG2RCVSND",
                "CONTROL_03": "MSG3RCVSND",
            }
        }
    }
}

java json spring-boot gson qjsonobject
2个回答
1
投票

试试这个代码,它应该做你需要的。

package com;


import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.LinkedHashMap;

public class Main {
    public static void main(String[] args) throws JsonProcessingException {
        String json = "{\n" +
                "    \"header\":{\n" +
                "        \"name\": \"transactionCount\",\n" +
                "        \"version\": \"2.0\",\n" +
                "        \"code\": \"1530\",\n" +
                "        \"country\": \"MX\",\n" +
                "        \"domain\": \"counts\",\n" +
                "        \"time\": \"2018-10-11 11:20:34.323 GMT\"\n" +
                "    },\n" +
                "    \"body\":{\n" +
                "        \"INPUNT\": \"I\",\n" +
                "        \"MESSAGE_01\": \"RSTW\",\n" +
                "        \"MESSAGE_02\": \"MNXTYP\",\n" +
                "        \"MESSAGE_03\": \"RSTWERDCV\",\n" +
                "        \"SEND_TIME\": \"20-NOV-2011 04:53:04 p.m.\",\n" +
                "        \"RCV_ID\": \"ABGRCV\",\n" +
                "        \"FORMAT0_MONTO\": \"200,000,300.00\",\n" +
                "        \"FORMATO_MONEDA\": \"USD\",\n" +
                "        \"CONTROL_01\": \"MSG1RCVSND\",\n" +
                "        \"CONTROL_02\": \"MSG2RCVSND\",\n" +
                "        \"CONTROL_03\": \"MSG3RCVSND\"\n" +
                "    }\n" +
                "}";

        ObjectMapper objectMapper = new ObjectMapper();
        LinkedHashMap hashMap = objectMapper.readValue(json, LinkedHashMap.class);
        Event event =  new Event(hashMap);
        System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(event));
    }

    public static class Event {
        @JsonProperty("event")
        private LinkedHashMap event;
        public Event(LinkedHashMap event){
            this.event = event;
        }
    }
}

0
投票

使用 Map 而不是 JSONObject 将修复 nameValuePairs

代码应该是这样的

  public String convertObjectToJson(CitiMarketSSAEvent citiMarketObject) {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setPrettyPrinting();
    gsonBuilder.disableHtmlEscaping();

    Map<Object,Object> map = new HashMap<>();
    map.put("event",citiMarketObject);

    Gson gson = gsonBuilder.create();
    return gson.toJson(map);
}
© www.soinside.com 2019 - 2024. All rights reserved.