【问题标题】:Parsing dynamic key and value nested json解析动态键值嵌套json
【发布时间】:2017-08-26 07:41:04
【问题描述】:
{
  "buildingNumber": 123,
  "apatmentNumber": "4567",
  "apartments": "123",
  "isActive": true,
  "possibleActions": [
    "ENTER",
    "EXIT"
  ],
  "enterVia": {
    "J1-B1": [
      "DEFAULT_ROUTE"
    ],
    "A1-D1": [
      "DEFAULT_ROUTE"
    ]
    },
  "SectionMap": {},
  "route": "abc|def (via xyz)"
  }

我有上面的示例 JSON。 “enterVia”中的全部内容是动态的。 我必须从响应中读取这个嵌套的 Json(如下所示)并在另一个请求中发送它。

  {
    "J1-B1": [
      "DEFAULT_ROUTE"
    ],
    "A1-D1": [
      "DEFAULT_ROUTE"
    ]
}

如果可以使用 Gson、ObjectMapper,请提出一种方法。

【问题讨论】:

    标签: parsing jackson gson objectmapper


    【解决方案1】:

    我找到了使用 ObjectMapper 的解决方案。下面是代码:

    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    import com.fasterxml.jackson.core.JsonParseException;
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.JsonMappingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class JsonParseTest {
    
        public static void main(String[] args) {
    
            String json = "{\r\n\t\"J1-B1\": [\r\n\t\t\"DEFAULT_ROUTE\"\r\n\t],\r\n\t\"A1-D1\": [\r\n\t\t\"DEFAULT_ROUTE\"\r\n\t]\r\n}";
    
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, List<String>> routesMap = null;
            try {
                routesMap = objectMapper.readValue(json, new TypeReference<Map<String, List<String>>>(){});
            } catch (JsonParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (JsonMappingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            System.out.println("read response output: " +routesMap);
    
    
            objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
            String jsonRequest = null;
    
            try {
                jsonRequest = objectMapper.writeValueAsString(routesMap);
            } catch (JsonProcessingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            System.out.println("next request output: " +jsonRequest);
        }
    
    }
    

    程序的输出:

    读取响应输出:{J1-B1=[DEFAULT_ROUTE], A1-D1=[DEFAULT_ROUTE]}

    下一个请求输出:{"J1-B1":["DEFAULT_ROUTE"],"A1-D1":["DEFAULT_ROUTE"]}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2018-12-25
      • 2021-05-18
      相关资源
      最近更新 更多