复杂类型json如何转化

  关于json简单的开发场景大家都会用,但是如果涉及到复杂类型的json转化如何操作呢?

之前在开发的业务场景中遇到需要在代码块中对如下形式的数据进行处理

[
  {
    "id": "9",
    "attachments": {
      "key1": {
        "download_url": "7955ca8e97dc219f9dda0b8102540247f48675ca",
        "filename": "logo.png"
      }
    }
  },
  {
    "id": "10",
    "attachments": {
      "key2": {
        "download_url": "7955ca8e97dc219f9dda0b8102540247f48675ca",
        "filename": "logo2.png"
      }
    }
  },
  {
    "id": "13",
    "attachments": []
  }
]

很容易看出来,以上的数据是个数组类型。他的 attachments元素看起来就很奇怪了,看形式应该是个map,但是接收的时候我将 attachments 定义成object元素接收过来,排除空的情况,剩下的的使用map的类型接收 我将他书写成

我先定义了一个对象,如下:

public class FileEO{
    private String download_url;
    private String filename;
}

然后书写定义map   HashMap<String,FileEO> 但是在直接作为对象转化的时候转化不成功,一直报错,经过一番查找发现

Json对于复杂类型的转化需要先定义type,解决方案如下:

     /**
     * 复杂类型的json转化需要先定义type 然后再进行转化
     */
    public static Type defineType() {
        return new TypeReference<Map<String, Object>>() {
        }.getType();
    }

    public static void main(String[] args) {
        /* 这里简单写一个demo书写使用形式 在工作中偶然遇到了这种形式的 实际情况比这种更复杂一点
        map中是一个对象,用普通的封装之后去解析会报错*/
        String str = " {\"money\":\"100.00\",\"payMethod\":\"alipay\"}";
        Type type = defineType();
        Map<String, Object> map = JSON.parseObject(str, type);
        System.out.println(map.get("money"));
        System.out.println(map.get("payMethod"));
    }

之前没有了解过复杂类型的json转化,这里遇到了,标记一下。

 

posted @ 2020-04-14 15:04  柒木木家  阅读(1035)  评论(0编辑  收藏  举报