Java处理JSON

这篇具有很好参考价值的文章主要介绍了Java处理JSON。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java处理json有很多种方法,在这里总结一下。

1 Jackson

Spring MVC 默认采用Jackson解析Json,出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。

1.1 引入的包

Jackson核心模块由三部分组成:jackson-core、jackson-annotations、jackson-databind。
由于jackson-databind 依赖 jackson-core 和 jackson-annotations,所以只显示地添加jackson-databind依赖,jackson-core 和 jackson-annotations 就会隐式地添加到 Java 项目工程中。

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.6</version>
</dependency>

1.2 ObjectMapper类

ObjectMapper类是Jackson中基于“对象绑定”的API,可以将JSON映射到Java对象(反序列化),也可以将Java对象映射到JSON(序列化)

默认情况下,Jackson通过匹配JSON字段名称与Java类的getter&setter方法名,将JSON的字段映射到Java类的属性。Jackson删除了getter&setter方法名称的getset部分,并将其余名称的第一个字符转换为小写后,和JSON字段名称做比较,相同即匹配上。
举例,如果有Java类如下:

public class Car {
    private String brand = null;
    private int doors = 0;
    // getter & Setter
    public String getBrand() { return this.brand; }
    public void   setBrand(String brand){ this.brand = brand;}
    public int    getDoors() { return this.doors; }
    public void   setDoors(int doors) { this.doors = doors; }
}

1.2.1 反序列化:从JSON获得Java对象

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // false表示忽略没有匹配上的JSON字段

String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }"; // JSON字符串
Car car = objectMapper.readValue(carJson, Car.class); // 从JSON字符串获取对象
Reader reader = new StringReader(carJson); // JSON字符输入流
car = objectMapper.readValue(reader, Car.class); // 从JSON字符输入流获取对象
// 类似的还有从File对象、URL对象、InputStream对象(字节输入流)、字节数组等获取java对象

String jsonArray = "[{\"brand\":\"ford\"}, {\"brand\":\"Fiat\"}]"; // JSON字符串(数组)
List<Car> cars = objectMapper.readValue(jsonArray, new TypeReference<List<Car>>(){}); // 从JSON数组字符串获取Java对象的数组

String jsonObject = "{\"brand\":\"ford\", \"doors\":5}"; // JSON字符串(Map)
Map<String, Object> jsonMap = objectMapper.readValue(jsonObject, 
	new TypeReference<Map<String,Object>>(){}); // 从JSON字符串获取Java Map

注意:还可以自定义反序列化规则,这里不详解。

1.2.2 序列化:将Java对象写入JSON

ObjectMapper objectMapper = new ObjectMapper();

Car car = new Car();
car.setBrand("BMW");
car.setDoors(4);

String json = objectMapper.writeValueAsString(car); // 将Java对象序列化为JSON字符串
objectMapper.writeValue(new FileOutputStream("data/output-2.json"), car); // 将Java对象序列化为JSON字符串并写入文件

注意:同样可以自定义序列化规则,这里不详解。

1.3 JsonNode类

如果不知道接收到的JSON格式,可以将其转换为JsonNode类,即Jackson的JSON树模型。文章来源地址https://www.toymoban.com/news/detail-410323.html

1.3.1 JSON字符串和JsonNode对象相互转换

ObjectMapper objectMapper = new ObjectMapper();
String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
try {
    JsonNode jsonNode = objectMapper.readValue(carJson, JsonNode.class); // 将JSON字符串转为JsonNode对象
    // JsonNode jsonNode = objectMapper.readTree(carJson); // 和上一行代码功能完全相同
} catch (IOException e) {
    e.printStackTrace();
}
String json = objectMapper.writeValueAsString(jsonNode); // 将JsonNode对象转为JSON字符串

1.3.2 JsonNode类访问JSON字段

ObjectMapper objectMapper = new ObjectMapper();
String carJson =
        "{ \"brand\" : \"Mercedes\", \"doors\" : 5," +
        "  \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +
        "  \"nestedObject\" : { \"field\" : \"value\" } }";
try {
    JsonNode jsonNode = objectMapper.readValue(carJson, JsonNode.class);
    // 字符串
    JsonNode brandNode = jsonNode.get("brand");
    String brand = brandNode.asText();
    System.out.println("brand = " + brand);
    // 整型
    JsonNode doorsNode = jsonNode.get("doors");
    int doors = doorsNode.asInt();
    System.out.println("doors = " + doors);
    // 数组
    JsonNode array = jsonNode.get("owners");
    JsonNode jsonNode = array.get(0);
    String john = jsonNode.asText();
    System.out.println("john  = " + john);
    // 子JSON
    JsonNode child = jsonNode.get("nestedObject");
    JsonNode childField = child.get("field");
    String field = childField.asText();
    System.out.println("field = " + field);
} catch (IOException e) {
    e.printStackTrace();
}

1.3.3 Java对象和JsonNode对象相互转换

ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.brand = "Cadillac";
car.doors = 4;
JsonNode carJsonNode = objectMapper.valueToTree(car); // Java对象转JsonNode对象
Car car0 = objectMapper.treeToValue(carJsonNode); // JsonNode对象转Java对象

1.3.4 JsonNode类的set、put、remove

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode = objectMapper.createObjectNode(); // 创建空的JsonNode对象
JsonNode childNode = readJsonIntoNode();
objectNode.set("child1", childNode); // 使用set方法给JsonNode添加子Node
objectNode.put("field1", "value1"); // 使用put方法给JsonNode添加字段
objectNode.remove("field1"); // 使用remove方法删除JsonNode某字段

1.3.5 循环JsonNode所有字段

Iterator<String> fieldNames = jsonNode.fieldNames(); // 创建Iterator遍历JsonNode字段
while(fieldNames.hasNext()) {
    String fieldName = fieldNames.next();
    JsonNode field = jsonNode.get(fieldName);
}

1.4 JsonParser类

1.5 JsonGenerator类

2 fastjson

3 Gson

到了这里,关于Java处理JSON的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Same Symbol | 哇咔咔!!!盘点一下表达矩阵中重复基因的处理方法!~

    医院天天叫我们填问卷,我真是不能理解。🫠 动不动就问我们对医院的福利满意吗,对自己的收入满意吗,觉不觉得工作负荷太重了???🙂 我们满不满意,觉不觉得累,医院心里没点数吗!?~~~🤒 不能再说了,再说我的号就要被河蟹掉了。🥸 今天的教程是相对比较基

    2024年02月06日
    浏览(37)
  • Java文件复制多种方法

    1、InputStream与OutputStream  创建两个文件 - 源和目标。然后我们从源创建InputStream并使用OutputStream将其写入目标文件进行 java 复制文件操作。 2、Apache Commons IO FileUtils copyFile(File srcFile, File destFile)可用于在 java 中复制文件。如果您已经在项目中使用 Apache Commons IO,那么使用它来简

    2024年02月06日
    浏览(36)
  • dede首页调用留言本标题的方法总结

    第一种方法:用feedback标签直接调用。 代码如下: [field:username function=\\\"(@me==\\\'guest\\\' ? \\\'游客\\\' : @me)\\\"/] 评论 [field:title/] [field:msg/] {/dede:feedback} 第二种方法:利用织梦的loop标签或SQL标签。 要调用这个标签,我们在这之前,应该事先了解,留言本模块的数据表为#@_guestbook !换成SQL标

    2024年02月03日
    浏览(49)
  • PCL点云处理之多种体素滤波方法大汇总(一百六十四)

    对PCL中的基于八叉树体素滤波方法,以及在此基础上,自己进一步实现的新滤波方法,进行一个汇总,列出各自的效果和,具体的实现代码 PCL中自带的滤波方法,也是最常用的滤波方法,应该是体素中的点云重心取代原始点,但使用时要注意体素不可过小,

    2024年02月05日
    浏览(52)
  • dede5.7修改标题title长度方法总结

    当我们大家好DEDE5.7CMS系统以后,添加资料的时候回发现官方默认的标题长度非常的短,从截图我们能看到默认长度是60,这个不能满足我们发内容的需求,所以我们要针对性的修改一下。 这里按照小编的经验,大家可以直接修改成200-255之间的字符长度,能够满足网站的标题

    2024年02月02日
    浏览(48)
  • java 分割字符串(多种方法)

    [toc] 1、String#split 可以根据给定的分隔符或正则表达式将一个字符串分割成多个部分 2、String#substring 一般情况我们都是用于截取字符串使用的,这里我们也是可以用来处理字符串的分割,只要循环就行 3、Pattern类 Pattern 类通常来说,我们是用于处理正则表达式,做一些match使

    2024年02月12日
    浏览(53)
  • Java处理JSON

    Java处理json有很多种方法,在这里总结一下。 Spring MVC 默认采用Jackson解析Json,出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。 Jackson核心模块由三部分组成:jackson-core、jackson-annotations、jackson-databind。 由于jackson-databind 依赖 jackson-core 和 jackson-annotations,所以只显

    2023年04月11日
    浏览(39)
  • H3C无线路由的配置方法的经验总结

    在配置H3C无线路由器之前,首先要做的是将电脑与无线路由器用网线连接起来,网线的另一端要接到无线路由器的LAN口上,建议按照无线路由器配置页面中的向导引导进行配置。   一、 有些人在使用无线路由器上网时,速度时快时慢,笔记本与无线路由器的距离很近,其实

    2024年02月05日
    浏览(37)
  • Java List 随机取值的多种方法

    为了从列表中获取随机元素,需要生成一个随机索引号,然后使用 list.get() 方法通过生成的索引编号获取元素。 这里关键是要记住,不得使用超过列表大小的索引。

    2024年02月15日
    浏览(49)
  • 如何使用Java处理JSON数据?

    在Java中,您可以使用许多库来处理JSON数据。以下是使用一种常见的库 Gson 的示例: 首先,确保您已经将 Gson 库添加到您的项目中。您可以在 Maven 中添加以下依赖项: 导入 Gson 类: 创建一个 Gson 实例: 将 JSON 字符串转换为 Java 对象,使用  fromJson()  方法: 上面代码中,将

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包