Este artigo está participando do "Projeto Pedra Dourada"
prefácio
No desenvolvimento diário de hoje, independentemente de front-end ou back-end, os dados no formato JSON são usados com mais frequência e podem até ser considerados onipresentes.
O mais contatado é que os dados passados na requisição POST geralmente são colocados no corpo da requisição em formato JSON, e os dados retornados por diversas APIs do lado do servidor são basicamente retornados em formato JSON no corpo da resposta. Estilo REST.
É claro que o JSON não é usado apenas no processo de solicitação e resposta, mas também precisa ser usado em alguns cenários de negócios, principalmente na conversão entre objetos JSON e Java .
Portanto, para nós do desenvolvimento Java, a conversão entre dados no formato JSON e objetos Java é inevitável.
ferramenta de conversão
Existem várias ferramentas de conversão convencionais, como segue. Recomenda-se escolher apenas uma delas para projetos gerais. Atualmente, Jackson é aquele com os comentários mais favoráveis.
-
Jackson
-
FastJson
-
Gson
-
HutoolName
String e lista JSON preparadas
Para fins de demonstração, aqui está uma string JSON:
String jsonStr = "{\"name\" : \"GTA5\", \"price\" : 54.5}";
复制代码
Aqui está um dado List<Game>
:
Game game1 = Game.builder().name("NBA2K23").price(new BigDecimal("198.0")).build();
Game game2 = Game.builder().name("Sim City4").price(new BigDecimal("22.5")).build();
List<Game> gameList = new ArrayList<>();
gameList.add(game1);
gameList.add(game2);
复制代码
Jackson
Precisamos usar ObjectMapper
o objeto para concluir a conversão:
ObjectMapper objectMapper = new ObjectMapper();
复制代码
Converter string JSON em objeto Java: readValue
Usando readValue
o método , o primeiro parâmetro é uma string JSON e o segundo parâmetro é o tipo da classe de destino convertida.
// 将 JSON 字符串 转成 Java 对象
Game game = objectMapper.readValue(jsonStr, Game.class);
复制代码
Converter objetos Java em strings JSON: writeValueAsString
Use writeValueAsString
o método , que aceita um objeto Java e retorna uma string JSON.
// 将 Java 对象转成 JSON 字符串
String gameJson = objectMapper.writeValueAsString(game);
复制代码
Converter lista em string JSON: writeValueAsString
Use também writeValueAsString
o método .
// 将 List<Game> 转成 JSON 字符串
String gameListJson = objectMapper.writeValueAsString(gameList);
复制代码
Converter string JSON em lista: readValue
使用 readValue
方法,第一个参数是 JSON 字符串,第二个参数是转化的目标 TypeReference(类型参照)对象,这里指定其泛型为 List<Game>
。
// 将 JSON 字符串 转成 List<Game>
List<Game> gameListFromJson = objectMapper.readValue(gameListJson, new TypeReference<List<Game>>() {});
复制代码
总结
从 JSON 到 Java 对象,使用 readValue
方法。
从 Java 对象到 JSON,使用 writeValueAsString
方法。
FastJson
我们需要借助 FastJson 提供的 JSONObject
对象来完成转化。
将 JSON 字符串 转成 Java 对象:parseObject
使用 parseObject
方法,将 JSON 字符串解析(转化)成 Java 对象,第一个参数是 JSON 字符串,第二个参数是目标类的类型。
// 将 JSON 字符串 转成 Java 对象
Game game = JSONObject.parseObject(jsonStr, Game.class);
复制代码
将 Java 对象转成 JSON 字符串:toJSONString
使用 toJSONString
方法,将 Java 对象直接转成 JSON 字符串,接受一个 Java 对象,返回对应的 JSON 字符串。
// 将 Java 对象转成 JSON 字符串
String gameJson = JSONObject.toJSONString(game);
复制代码
将 List 转成 JSON 字符串:toJSONString
同理,可以直接丢一个 List 对象给 toJSONString
方法,把 List 转成 JSON 字符串。
// 将 List<Game> 转成 JSON 字符串
String gameListJson = JSONObject.toJSONString(gameList);
复制代码
将 JSON 字符串 转成 List:parseArray
使用 parseArray
方法,将 JSON 字符串解析成 List。2.0 版本需要调用 toJavaList
方法,得到最后的 List
// 将 JSON 字符串 转成 List<Game>
// fastjson 1.2.x 版本:List<Game> gameListFromJson = JSONObject.parseArray(gameListJson, Game.class);
List<Game> gameListFromJson = JSONArray.parseArray(gameListJson).toJavaList(Game.class);
复制代码
总结
JSON 转成 Java Bean 使用 parseObject
方法,转成 List 使用 parseArray
方法。
任意对象转成 JSON,则使用 toJSONString
方法。
Gson
我们需要借助 Gson
对象来完成转化:
Gson gson = new Gson();
复制代码
将 JSON 字符串 转成 Java 对象:fromJson
使用 fromJson
方法,两个参数的定义也是和上面两个一样的。
// 将 JSON 字符串 转成 Java 对象
Game game = gson.fromJson(jsonStr, Game.class);
复制代码
将 Java 对象转成 JSON 字符串:toJson
使用 toJson
方法,接受一个 Java 对象,然后返回对应的 JSON 字符串。
// 将 Java 对象转成 JSON 字符串
String gameJson = gson.toJson(game);
复制代码
将 List 转成 JSON 字符串:toJson
List 也是同理,使用 toJson
方法。
// 将 List<Game> 转成 JSON 字符串
String gameListJson = gson.toJson(gameList);
复制代码
将 JSON 字符串 转成 List:fromJson
这里和 Jackson 的也是类似,第二个参数使用 TypeToken
对象指定转化的目标类型为 List<Game>
。
// 将 JSON 字符串 转成 List<Game>
List<Game> gameListFromJson = gson.fromJson(gameListJson, new TypeToken<List<Game>>() {}.getType());
复制代码
总结
从 JSON 到 Java 对象,使用 fromJson
方法。
从 Java 对象到 JSON,使用 toJson
方法。
Hutool
我们需要借助 Hutool 提供的 JSONUtil
对象来完成转化。
将 JSON 字符串 转成 Java 对象:toBean
使用 toBean
方法,还是同样的,接受的两个参数,一个字符串,一个目标类的类型。
// 将 JSON 字符串 转成 Java 对象
Game game = JSONUtil.toBean(jsonStr, Game.class);
复制代码
将 Java 对象转成 JSON 字符串:toJsonStr
使用 toJsonStr
方法,接受一个 Java 对象,返回一个 JSON 字符串。
// 将 Java 对象转成 JSON 字符串
String gameJson = JSONUtil.toJsonStr(game);
复制代码
将 List 转成 JSON 字符串:toJsonStr
同理,也是 toJsonStr
方法。
// 将 List<Game> 转成 JSON 字符串
String gameListJson = JSONUtil.toJsonStr(gameList);
复制代码
将 JSON 字符串 转成 List:toList
使用 toList
方法,和 toBean
方法接受的参数一样。
// 将 JSON 字符串 转成 List<Game>
List<Game> gameListFromJson = JSONUtil.toList(gameListJson, Game.class);
复制代码
总结
JSON 转成 Java Bean 使用 toBean
方法,转成 List 使用 toList
方法。
Para converter qualquer objeto em JSON, use toJsonStr
o método .
último dos últimos
Devido à limitação do meu nível, é inevitável que existam erros e deficiências. 屏幕前的靓仔靓女们
Se você encontrar algum, por favor, aponte!
Por fim, obrigado por ler isso, obrigado por levar meus esforços a sério e espero que este blog seja útil para você!
Você deu um joinha levemente, isso vai adicionar uma estrela brilhante e deslumbrante ao mundo em meu coração!