当前位置: 首页 > news >正文

从json字符串中获取指定值

目录

一、 FastJSON

1)解析 JSON 字符串为 Java 对象

2)处理嵌套的 JSON 结构(创建java对象)

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值)

4)处理嵌套的 JSON 结构(使用路径表达式)

二、Jackson

1)创建java对象

2)直接从 JSON 对象中获取值

三、Gson

1)解析为 Java 对象

2)直接从 JSON 对象中获取值

四、org.json

1)解析为JSONObject对象

2)使用递归遍历 JSON 对象


一、 FastJSON

1)解析 JSON 字符串为 Java 对象

存在一个json字符串:{"name":"John","age":30,"isStudent":false}


//定义一个 Java 类来对应这个 JSON 结构
class Person {private String name;private int age;private boolean isStudent;// 生成相应的 getter 和 setter 方法
}

直接从 JSON 对象中获取值

import com.alibaba.fastjson.JSONObject;public class Main {public static void main(String[] args) {String jsonStr = "{\"name\":\"John\",\"age\":30,\"isStudent\":false}";JSONObject jsonObject = JSON.parseObject(jsonStr);String name = jsonObject.getString("name");int age = jsonObject.getInteger("age");boolean isStudent = jsonObject.getBooleanValue("isStudent");System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Is Student: " + isStudent);}
}

2)处理嵌套的 JSON 结构(创建java对象)

已知存在一个josn:{"person":{"name":"John","age":30},"address":{"city":"New York","country":"USA"}}

//定义对应的 Java 类
class Person {private String name;private int age;// getter 和 setter 方法
}class Address {private String city;private String country;// getter 和 setter 方法
}class RootObject {private Person person;private Address address;// getter 和 setter 方法
}

解析:

import com.alibaba.fastjson.JSON;public class Main {public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"John\",\"age\":30},\"address\":{\"city\":\"New York\",\"country\":\"USA\"}}";RootObject rootObject = JSON.parseObject(jsonStr, RootObject.class);Person person = rootObject.getPerson();Address address = rootObject.getAddress();String name = person.getName();int age = person.getAge();String city = address.getCity();String country = address.getCountry();System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

3)处理嵌套的 JSON 结构(直接从 JSON 对象中获取值

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONObject;public class Main {public static void main(String[] args) {String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";JSONObject jsonObject = JSON.parseObject(jsonStr);JSONObject userObject = jsonObject.getJSONObject("user");String userName = userObject.getString("name");int userAge = userObject.getInteger("age");JSONObject addressObject = userObject.getJSONObject("address");String city = addressObject.getString("city");String country = addressObject.getString("country");JSONArray ordersArray = jsonObject.getJSONArray("orders");for (int i = 0; i < ordersArray.size(); i++) {JSONObject orderObject = ordersArray.getJSONObject(i);int orderId = orderObject.getInteger("id");String product = orderObject.getString("product");System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("User Name: " + userName);System.out.println("User Age: " + userAge);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

4)处理嵌套的 JSON 结构(使用路径表达式

存在json串:

{"user":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.alibaba.fastjson.JSONPath;public class Main {public static void main(String[] args) {String jsonStr = "{\"user\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";String userName = (String) JSONPath.read(jsonStr, "$.user.name");int userAge = (int) JSONPath.read(jsonStr, "$.user.age");String city = (String) JSONPath.read(jsonStr, "$.user.address.city");String country = (String) JSONPath.read(jsonStr, "$.user.address.country");Object[] orders = JSONPath.read(jsonStr, "$.orders");for (Object order : orders) {int orderId = (int) JSONPath.read(order, "$.id");String product = (String) JSONPath.read(order, "$.product");System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("User Name: " + userName);System.out.println("User Age: " + userAge);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

二、Jackson

1)创建java对象

已知存在json串:

{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

class Address {private String city;private String country;// Getters and setters
}class Order {private int id;private String product;// Getters and setters
}class Person {private String name;private int age;private Address address;// Getters and setters
}class RootObject {private Person person;private Order[] orders;// Getters and setters
}

使用 Jackson 进行解析到对象中

import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) throws Exception {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";ObjectMapper objectMapper = new ObjectMapper();RootObject rootObject = objectMapper.readValue(jsonStr, RootObject.class);String name = rootObject.getPerson().getName();int age = rootObject.getPerson().getAge();String city = rootObject.getPerson().getAddress().getCity();String country = rootObject.getPerson().getAddress().getCountry();Order[] orders = rootObject.getOrders();for (Order order : orders) {int orderId = order.getId();String product = order.getProduct();System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}
2)直接从 JSON 对象中获取值

已知存在json串:

{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;public class Main {public static void main(String[] args) throws Exception {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";ObjectMapper objectMapper = new ObjectMapper();JsonNode rootNode = objectMapper.readTree(jsonStr);JsonNode personNode = rootNode.get("person");String name = personNode.get("name").asText();int age = personNode.get("age").asInt();JsonNode addressNode = personNode.get("address");String city = addressNode.get("city").asText();String country = addressNode.get("country").asText();JsonNode ordersNode = rootNode.get("orders");for (JsonNode orderNode : ordersNode) {int orderId = orderNode.get("id").asInt();String product = orderNode.get("product").asText();System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

三、Gson

1)解析为 Java 对象

已知存在json串:{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

定义对应的 Java 类:

class Address {private String city;private String country;// Getters and setters
}class Order {private int id;private String product;// Getters and setters
}class Person {private String name;private int age;private Address address;// Getters and setters
}class RootObject {private Person person;private Order[] orders;// Getters and setters
}

使用 Gson 进行解析:

import com.google.gson.Gson;public class Main {public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";Gson gson = new Gson();RootObject rootObject = gson.fromJson(jsonStr, RootObject.class);String name = rootObject.getPerson().getName();int age = rootObject.getPerson().getAge();String city = rootObject.getPerson().getAddress().getCity();String country = rootObject.getPerson().getAddress().getCountry();Order[] orders = rootObject.getOrders();for (Order order : orders) {int orderId = order.getId();String product = order.getProduct();System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}
2)直接从 JSON 对象中获取值

已知存在json串:{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

不创建 Java 对象,直接从 JSON 对象获取值:

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;public class Main {public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";JsonObject jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();JsonObject personObject = jsonObject.getAsJsonObject("person");String name = personObject.get("name").getAsString();int age = personObject.get("age").getAsInt();JsonObject addressObject = personObject.getAsJsonObject("address");String city = addressObject.get("city").getAsString();String country = addressObject.get("country").getAsString();JsonArray ordersArray = jsonObject.getAsJsonArray("orders");for (JsonElement orderElement : ordersArray) {JsonObject orderObject = orderElement.getAsJsonObject();int orderId = orderObject.get("id").getAsInt();String product = orderObject.get("product").getAsString();System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

四、org.json

1)解析为JSONObject对象

已知存在json串:{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

使用org.json解析:

import org.json.JSONArray;
import org.json.JSONObject;public class Main {public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";JSONObject jsonObject = new JSONObject(jsonStr);// 获取 person 对象JSONObject personObject = jsonObject.getJSONObject("person");String name = personObject.getString("name");int age = personObject.getInt("age");// 获取 address 对象JSONObject addressObject = personObject.getJSONObject("address");String city = addressObject.getString("city");String country = addressObject.getString("country");// 获取 orders 数组JSONArray ordersArray = jsonObject.getJSONArray("orders");for (int i = 0; i < ordersArray.length(); i++) {JSONObject orderObject = ordersArray.getJSONObject(i);int orderId = orderObject.getInt("id");String product = orderObject.getString("product");System.out.println("Order ID: " + orderId + ", Product: " + product);}System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);System.out.println("Country: " + country);}
}

2)使用递归遍历 JSON 对象

已知存在json串:已知存在json串:{"person":{"name":"Alice","age":25,"address":{"city":"New York","country":"USA"}},"orders":[{"id":1,"product":"Book"},{"id":2,"product":"Pen"}]}

如果 JSON 结构更加复杂,可以使用递归的方式遍历获取值。

import org.json.JSONArray;
import org.json.JSONObject;public class Main {public static void traverseJSON(JSONObject jsonObject) {for (String key : JSONObject.getNames(jsonObject)) {Object value = jsonObject.get(key);if (value instanceof JSONObject) {traverseJSON((JSONObject) value);} else if (value instanceof JSONArray) {JSONArray array = (JSONArray) value;for (int i = 0; i < array.length(); i++) {Object item = array.get(i);if (item instanceof JSONObject) {traverseJSON((JSONObject) item);} else {// 处理基本类型的值System.out.println(key + ": " + item);}}} else {// 处理基本类型的值System.out.println(key + ": " + value);}}}public static void main(String[] args) {String jsonStr = "{\"person\":{\"name\":\"Alice\",\"age\":25,\"address\":{\"city\":\"New York\",\"country\":\"USA\"}},\"orders\":[{\"id\":1,\"product\":\"Book\"},{\"id\":2,\"product\":\"Pen\"}]}";JSONObject jsonObject = new JSONObject(jsonStr);traverseJSON(jsonObject);}
}


http://www.mrgr.cn/news/14337.html

相关文章:

  • Windows 平台编译openssl3.3
  • 全自动饲料机整套设备:养殖业生产线利器
  • 深入理解Spring Security
  • 数学建模学习(128):使用Python结合CILOS与熵法的多准则决策权重确定
  • pytorch 数据处理
  • pytorch中的__init__()与super__init__()方法
  • 文件包含漏洞(1)
  • PostgreSQL:后端开发者的瑞士军刀
  • 计算机毕业设计选题推荐-在线音乐网站-音乐专辑商城-Java/Python项目实战
  • 这些持续高额派息的公司,都做对了什么?
  • 微信小程序:点击事件(bindtap)传递参数
  • 云端Ruby:将应用无缝融入云服务的艺术
  • Ubuntu 24.04部署Wordpress
  • 大模型之二十八-语音识别Whisper进阶
  • python常见报错总结
  • shutil库学习之copy和copy2函数
  • Docker常见命令和参数
  • oracle日常训练
  • 什么是激光测距仪
  • 美团2024年春招第一场笔试【前端移动端方向】编程题题解Java