Java和Json的那些事
创始人
2024-05-31 05:26:58
0

Java和Json的那些事

一、Java简介

Java是一种广泛使用的编程语言,常用于开发各种类型的应用程序,包括桌面应用程序、移动应用程序和Web应用程序。Java是一种面向对象的语言,具有丰富的类库和强大的功能,可以进行多线程编程、网络编程和安全编程等。

二、Json简介

JSON是一种轻量级的数据交换格式,用于表示简单的数据结构和对象。JSON的数据格式非常简单,易于理解和编写,并且广泛应用于Web应用程序和移动应用程序等领域。在Java中,可以使用第三方库来解析和生成JSON数据,例如GSON和Jackson等库。

三、两者关系

在Java中,可以使用各种库和框架来处理JSON数据,例如JSON库、GSON库、Jackson库等。这些库提供了各种功能,包括将Java对象转换为JSON格式,将JSON格式转换为Java对象,以及处理JSON数组和嵌套JSON等。使用这些库可以使Java开发人员更轻松地处理JSON数据。

四、Java中常用处理JSON数据的API

  1. org.json:这是Java SE 7及更高版本中提供的官方JSON处理API。它提供了JSONObject和JSONArray等类来解析和生成JSON数据。但是这个库已经很久没有更新,且在处理大量数据时性能较差,因此并不推荐使用。
  2. Gson:由Google提供的开源JSON处理库。Gson可以将Java对象转换为JSON格式,也可以将JSON格式转换为Java对象。Gson使用起来非常简单,而且具有良好的性能。它可以处理复杂的嵌套JSON结构,并且支持自定义的序列化和反序列化规则。
  3. Jackson:又称Jackson JSON Processor,是由FasterXML提供的一个开源的高性能JSON处理库。Jackson提供了三个主要的模块:Jackson Core、Jackson Databind和Jackson Annotations。Jackson Core提供了JSON解析和生成的基本API,Jackson Databind用于将Java对象映射到JSON格式,Jackson Annotations用于定义JSON的序列化和反序列化规则。
  4. JSON-lib:一个比较老的开源JSON处理库,已经不再维护。它提供了一些类来解析和生成JSON数据,但是使用起来比较复杂,而且性能不如Gson和Jackson。

以上是Java中常用的处理JSON数据的API,其中Gson和Jackson是目前比较流行和常用的两个库

五、常用类

常用的处理JSON数据的类取决于你选择使用哪个库。以下是几个流行的JSON处理库以及其常用的类:

  1. org.json:
    • JSONObject:用于表示JSON对象。
    • JSONArray:用于表示JSON数组。
    • JSONTokener:用于解析JSON字符串并生成相应的JSONObject或JSONArray对象。
  2. Gson:
    • Gson:主要的类,用于将Java对象转换为JSON格式,以及将JSON格式转换为Java对象。
    • JsonParser:用于解析JSON字符串并生成JsonElement对象。
    • JsonElement:表示JSON元素的抽象类,包括JsonObject、JsonArray、JsonPrimitive和JsonNull。
  3. Jackson:
    • ObjectMapper:主要的类,用于将Java对象转换为JSON格式,以及将JSON格式转换为Java对象。
    • JsonParser:用于解析JSON字符串并生成JsonNode对象。
    • JsonNode:表示JSON节点的抽象类,包括JsonArray、JsonObject、JsonNumber、JsonString和JsonBoolean。

以上是常用的JSON处理库和类。使用不同的库和类,可以根据自己的需求选择最合适的方式处理JSON数据。

六、使用案例

  • 基于org.json
import org.json.*;public class JsonOrgExample {public static void main(String[] args) throws JSONException {String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";JSONObject jsonObject = new JSONObject(jsonString);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");String city = jsonObject.getString("city");System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("City: " + city);}
}----------------------------------------------------------------------import org.json.*;public class JsonOrgExample {public static void main(String[] args) throws JSONException {String jsonString = "{\n" +"    \"name\": \"John\",\n" +"    \"age\": 30,\n" +"    \"address\": {\n" +"        \"street\": \"123 Main St\",\n" +"        \"city\": \"New York\",\n" +"        \"state\": \"NY\",\n" +"        \"zip\": \"10001\"\n" +"    },\n" +"    \"phoneNumbers\": [\n" +"        {\n" +"            \"type\": \"home\",\n" +"            \"number\": \"555-1234\"\n" +"        },\n" +"        {\n" +"            \"type\": \"work\",\n" +"            \"number\": \"555-5678\"\n" +"        }\n" +"    ],\n" +"    \"emails\": [\n" +"        \"john@example.com\",\n" +"        \"john.doe@example.com\"\n" +"    ]\n" +"}";JSONObject jsonObject = new JSONObject(jsonString);String name = jsonObject.getString("name");int age = jsonObject.getInt("age");JSONObject addressObject = jsonObject.getJSONObject("address");String street = addressObject.getString("street");String city = addressObject.getString("city");String state = addressObject.getString("state");String zip = addressObject.getString("zip");JSONArray phoneNumbersArray = jsonObject.getJSONArray("phoneNumbers");String homePhoneNumber = phoneNumbersArray.getJSONObject(0).getString("number");String workPhoneNumber = phoneNumbersArray.getJSONObject(1).getString("number");JSONArray emailsArray = jsonObject.getJSONArray("emails");String email1 = emailsArray.getString(0);String email2 = emailsArray.getString(1);System.out.println("Name: " + name);System.out.println("Age: " + age);System.out.println("Street: " + street);System.out.println("City: " + city);System.out.println("State: " + state);System.out.println("Zip: " + zip);System.out.println("Home phone number: " + homePhoneNumber);System.out.println("Work phone number: " + workPhoneNumber);System.out.println("Email 1: " + email1);System.out.println("Email 2: " + email2);}
}
  • Gson
import com.google.gson.*;public class GsonExample {public static void main(String[] args) {String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";Gson gson = new Gson();Person person = gson.fromJson(jsonString, Person.class);System.out.println("Name: " + person.getName());System.out.println("Age: " + person.getAge());System.out.println("City: " + person.getCity());}
}class Person {private String name;private int age;private String city;// getters and setters
}----------------------------------------------------------------------import com.google.gson.*;public class GsonExample {public static void main(String[] args) {String jsonString = "{\n" +"    \"name\": \"John\",\n" +"    \"age\": 30,\n" +"    \"address\": {\n" +"        \"street\": \"123 Main St\",\n" +"        \"city\": \"New York\",\n" +"        \"state\": \"NY\",\n" +"        \"zip\": \"10001\"\n" +"    },\n" +"    \"phoneNumbers\": [\n" +"        {\n" +"            \"type\": \"home\",\n" +"            \"number\": \"555-1234\"\n" +"        },\n" +"        {\n" +"            \"type\": \"work\",\n" +"            \"number\": \"555-5678\"\n" +"        }\n" +"    ],\n" +"    \"emails\": [\n" +"        \"john@example.com\",\n" +"        \"john.doe@example.com\"\n" +"    ]\n" +"}";Gson gson = new Gson();Person person = gson.fromJson(jsonString, Person.class);System.out.println("Name: " + person.getName());System.out.println("Age: " + person.getAge());System.out.println("Street: " + person.getAddress().getStreet());System.out.println("City: " + person.getAddress().getCity());System.out.println("State: " + person.getAddress().getState());System.out.println("Zip: " + person.getAddress().getZip());System.out.println("Home phone number: " + person.getPhoneNumbers().get(0).getNumber());System.out.println("Work phone number: " + person.getPhoneNumbers().get(1).getNumber());System.out.println("Email 1: " + person.getEmails().get(0));System.out.println("Email 2: " + person.getEmails().get(1));}
}class Person {private String name;private int age;private Address address;private List phoneNumbers;private List emails;// getters and setters
}class Address {private String street;private String city;private String state;private String zip;// getters and setters
}class PhoneNumber {private String type;private String number;// getters and setters
}
  • Jackson
import com.fasterxml.jackson.databind.*;public class JacksonExample {public static void main(String[] args) throws JsonProcessingException {String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";ObjectMapper objectMapper = new ObjectMapper();Person person = objectMapper.readValue(jsonString, Person.class);System.out.println("Name: " + person.getName());System.out.println("Age: " + person.getAge());System.out.println("City: " + person.getCity());}
}class Person {private String name;private int age;private String city;// getters and setters
}----------------------------------------------------------------------import com.fasterxml.jackson.databind.*;public class JacksonExample {public static void main(String[] args) throws JsonProcessingException {String jsonString = "{\n" +"    \"name\": \"John\",\n" +"    \"age\": 30,\n" +"    \"address\": {\n" +"        \"street\": \"123 Main St\",\n" +"        \"city\": \"New York\",\n" +"        \"state\": \"NY\",\n" +"        \"zip\": \"10001\"\n" +"    },\n" +"    \"phoneNumbers\": [\n" +"        {\n" +"            \"type\": \"home\",\n" +"            \"number\": \"555-1234\"\n" +"        },\n" +"        {\n" +"            \"type\": \"work\",\n" +"            \"number\": \"555-5678\"\n" +"        }\n" +"    ],\n" +"    \"emails\": [\n" +"        \"john@example.com\",\n" +"        \"john.doe@example.com\"\n" +"    ]\n" +"}";ObjectMapper objectMapper = new ObjectMapper();Person person = objectMapper.readValue(jsonString, Person.class);System.out.println("Name: " + person.getName());System.out.println("Age: " + person.getAge());System.out.println("Street: " + person.getAddress().getStreet());System.out.println("City: " + person.getAddress().getCity());System.out.println("State: " + person.getAddress().getState());System.out.println("Zip: " + person.getAddress().getZip());System.out.println("Home phone number: " + person.getPhoneNumbers().get(0).getNumber());System.out.println("Work phone number: " + person.getPhoneNumbers().get(1).getNumber());System.out.println("Email 1: " + person.getEmails().get(0));System.out.println("Email 2: " + person.getEmails().get(1));}
}class Person {private String name;private int age;private Address address;private List phoneNumbers;private List emails;// getters and setters
}class Address {private String street;private String city;private String state;private String zip;// getters and setters
}class PhoneNumber {private String type;private String number;// getters and setters
}

七、gson和jackson区别

Gson和Jackson都是在Java中处理JSON数据的库,它们都有自己的优点和适用场景。

以下是Gson和Jackson的主要区别:

  1. 性能:Gson通常比Jackson更快,因为它专注于将Java对象转换为JSON格式,而不是JSON格式转换为Java对象。但是,这种性能优势在处理大型数据集时可能会减少,因为Jackson在处理大型JSON数据集时更有效率。
  2. 易用性:Gson通常被认为比Jackson更易用,因为它提供了更简单的API和更少的配置选项。但是,Jackson提供了更多的配置选项,使其更灵活,并且它的功能更强大。
  3. 对象映射:Gson支持自定义对象映射规则,这使得它在处理复杂的Java对象时非常方便。而Jackson默认情况下采用JavaBean规范进行对象映射,这可能需要一些额外的配置来实现自定义对象映射。
  4. 处理嵌套JSON:Jackson通常比Gson更适合处理嵌套的JSON数据,因为Jackson支持将JSON解析为一个树状结构,这使得处理嵌套的JSON数据变得更容易。

总之,Gson和Jackson都是非常流行和强大的JSON处理库,它们都有自己的优点和缺点,可以根据实际需求来选择使用哪一个。

八、jackson中的jsonnode

​ 在Jackson中,将JSON解析为一个树状结构可以使用JsonNode类,这个类可以表示JSON数据的任何部分,包括对象、数组、字符串、数字等。JsonNode类提供了许多方法来访问和操作JSON数据,这使得处理嵌套的JSON数据变得更容易。

JsonNode类的一些常用API:

  1. get(String fieldName):获取指定名称的JSON属性,返回JsonNode对象。
  2. get(int index):获取数组的指定元素,返回JsonNode对象。
  3. asText():将JSON节点转换为字符串。
  4. asInt():将JSON节点转换为整数。
  5. asBoolean():将JSON节点转换为布尔值。
  6. has(String fieldName):检查是否存在指定名称的JSON属性。
  7. isArray():检查该节点是否为数组。
  8. isObject():检查该节点是否为对象。
  9. size():获取该节点的大小(对于数组是元素个数,对于对象是属性个数)。
import com.fasterxml.jackson.databind.*;public class JsonNodeExample {public static void main(String[] args) throws JsonProcessingException {String jsonString = "{\n" +"    \"name\": \"John\",\n" +"    \"age\": 30,\n" +"    \"address\": {\n" +"        \"street\": \"123 Main St\",\n" +"        \"city\": \"New York\",\n" +"        \"state\": \"NY\",\n" +"        \"zip\": \"10001\"\n" +"    },\n" +"    \"phoneNumbers\": [\n" +"        {\n" +"            \"type\": \"home\",\n" +"            \"number\": \"555-1234\"\n" +"        },\n" +"        {\n" +"            \"type\": \"work\",\n" +"            \"number\": \"555-5678\"\n" +"        }\n" +"    ],\n" +"    \"emails\": [\n" +"        \"john@example.com\",\n" +"        \"john.doe@example.com\"\n" +"    ]\n" +"}";ObjectMapper objectMapper = new ObjectMapper();JsonNode rootNode = objectMapper.readTree(jsonString);JsonNode nameNode = rootNode.get("name");String name = nameNode.asText();System.out.println("Name: " + name);JsonNode ageNode = rootNode.get("age");int age = ageNode.asInt();System.out.println("Age: " + age);JsonNode addressNode = rootNode.get("address");String street = addressNode.get("street").asText();System.out.println("Street: " + street);String city = addressNode.get("city").asText();System.out.println("City: " + city);String state = addressNode.get("state").asText();System.out.println("State: " + state);String zip = addressNode.get("zip").asText();System.out.println("Zip: " + zip);JsonNode phoneNumbersNode = rootNode.get("phoneNumbers");boolean isPhoneNumbersArray = phoneNumbersNode.isArray();System.out.println("Is phoneNumbers an array? " + isPhoneNumbersArray);int phoneNumbersSize = phoneNumbersNode.size();System.out.println("Phone numbers size: " + phoneNumbersSize);JsonNode firstPhoneNumberNode = phoneNumbersNode.get(0);String homePhoneNumber = firstPhoneNumberNode.get("number").asText();System.out.println("Home phone number: " + homePhoneNumber);JsonNode emailsNode = rootNode.get("emails");boolean isEmailsArray = emailsNode.isArray();System.out.println("Is emails an array? " + isEmailsArray);int emailsSize = emailsNode.size();System.out.println("Emails size: " + emailsSize);String email1 = emailsNode.get(0).asText();System.out.println("Email 1: " + email1);String email2 = emailsNode.get(1).asText();System.out.println("Email 2: " + email2);}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...