JSON是什么?
JSON的基本结构:
JSON数据结构类型(语法):
简单示例
例如,一个简单的JSON数据可能如下所示:
{
"name": "John",
"age": 25,
"phoneNumber": [
{"type": "home", "number": "123-456-7890"},
{"type": "mobile", "number": "098-765-4321"}
]
}
//例如,在JavaScript中,你可以这样获取名字:
const data = JSON.parse('{"name": "John","age": 25,"phoneNumber": [{"type": "home","number": "123-456-7890"},{"type": "mobile","number": "098-765-4321"}]}');
console.log(data.name); // 输出: John
//同样,你也可以轻松地访问电话号码数组中的某个特定电话号码:
console.log(data.phoneNumber[0].number); // 输出: 123-456-7890
JSON与XML的区别
JSON (JavaScript Object Notation) 和 XML (eXtensible Markup Language) 都是用于存储和传输数据的格式,但是它们有着显著的不同之处。下面是 JSON 和 XML 的一些关键区别:
JSON
XML
使用场景
总结
JSON 和 XML 各有优势,选择哪种格式取决于具体的应用需求。如果需要在 Web 应用中快速传输数据,JSON 是更好的选择;如果需要高度结构化的数据格式和跨语言的兼容性,XML 可能更适合。
Json序列化和反序列化的含义
JSON序列化
JSON序列化是指将复杂数据结构(如对象、数组、集合等)转换为JSON格式的字符串的过程。这个过程通常发生在数据需要在网络上传输或存储到文件中时。序列化后的JSON字符串可以被任何能够理解JSON格式的系统读取和解析。
目的
JSON反序列化
JSON反序列化则是序列化的逆过程,即将JSON格式的字符串转换回原始的数据结构(如对象、数组等)。这个过程通常发生在接收到JSON数据并需要在应用程序中使用这些数据时。
目的
JSON 和 JS 对象互转
在JavaScript中,JSON(JavaScript Object Notation)与JS对象之间的转换是通过内置的JSON对象的两个方法完成的:JSON.parse()用于解析JSON字符串并转换为JS对象,而JSON.stringify()用于将JS对象转换为JSON字符串。
1. JSON字符串转换为JavaScript对象-JSON.parse()
JSON.parse()方法用于将JSON字符串转换为JavaScript对象。它接受一个JSON格式的字符串作为参数,并返回一个对应的JavaScript对象。
语法:
const obj = JSON.parse(jsonString);
示例:
const jsonString = '{"name":"John","age":30,"city":"New York"}';
const myObj = JSON.parse(jsonString);
console.log(myObj); // 输出: { name: 'John', age: 30, city: 'New York' }
2. 将JavaScript对象转换为JSON字符串-JSON.stringify()
JSON.stringify()方法用于将JavaScript对象转换为JSON字符串。它接受一个JavaScript对象作为参数,并返回一个JSON格式的字符串。
语法:
const jsonString = JSON.stringify(obj);
示例:
const myObj = { name: "John", age: 30, city: "New York" };
const jsonString = JSON.stringify(myObj);
console.log(jsonString); // 输出: '{"name":"John","age":30,"city":"New York"}'
示例:
const myObj = { name: "John", age: 30, city: "New York" };
const jsonString = JSON.stringify(myObj, null, 2);
console.log(jsonString);
// 输出:
// {
// "name": "John",
// "age": 30,
// "city": "New York"
// }
注意事项
JSON 和 Java 对象互转
在Java中,JSON与Java对象之间的转换通常需要借助第三方库,因为Java标准库并不直接支持JSON的解析和生成。常用的库有Jackson、Gson、org.json(由JSON的发明者Douglas Crockford创建)、Fastjson等。这里我将分别介绍使用Jackson进行JSON与Java对象的互转。
1. 添加依赖
如果你使用Maven,可以在pom.xml中添加以下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2. JSON转Java对象-readValue
这个方法将JSON字符串转换为Java对象。如果在反序列化过程中遇到问题,它会抛出IOException。
import com.fasterxml.jackson.databind.ObjectMapper;
public class User {
private String name;
private int age;
// Getters and setters...
}
public class Main {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"John\",\"age\":30}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user.getName()); // 输出: John
}
}
3. Java对象转JSON-writeValueAsString
这个方法接受一个Java对象作为参数,并返回该对象的JSON字符串表示。如果在序列化过程中遇到问题,它会抛出JsonProcessingException。
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
User user = new User("John", 30);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json); // 输出: {"name":"John","age":30}
}
}
JSON 和 C#对象互转
在C#中,JSON与C#对象之间的转换可以通过多种库来实现,其中最流行的是Newtonsoft.Json,它提供了强大的功能和良好的性能。此外,.NET Core 和 .NET 5+ 中引入了新的System.Text.Json库,它提供了更快的序列化和反序列化性能,但功能上可能不如Newtonsoft.Json全面,下面使用Newtonsoft.Json举例。
DeserializeObject和SerializeObject是Json.NET库中用于JSON序列化和反序列化的方法。Json.NET(也称为Newtonsoft.Json)是一个流行的.NET JSON框架,它提供了强大的功能来处理JSON数据。
1. 安装 NuGet 包
在Visual Studio中,你可以通过NuGet包管理器安装Newtonsoft.Json包。
2. JSON转C#对象- JsonConvert.DeserializeObject
DeserializeObject方法用于将JSON字符串转换回.NET对象。它同样在JsonConvert类中定义,可以将JSON字符串反序列化为相应的.NET对象。
using Newtonsoft.Json;
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
string json = "{\"Name\":\"John\",\"Age\":30}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Name); // 输出: John
}
}
3. C#对象转JSON-JsonConvert.SerializeObject
SerializeObject方法用于将.NET对象转换为JSON字符串。它在JsonConvert类中定义,可以将任何实现了ISerializable接口或有公共属性的对象序列化为JSON格式。
using Newtonsoft.Json;
public class Program
{
public static void Main()
{
User user = new User { Name = "John", Age = 30 };
string json = JsonConvert.SerializeObject(user);
Console.WriteLine(json); // 输出: {"Name":"John","Age":30}
}
}
Json转义的概念和目的
JSON转义的概念主要为了确保JSON数据的正确性和兼容性,特别是在JSON字符串中包含特殊字符时。转义机制允许这些特殊字符被安全地包含在JSON文本中,而不改变其原本的语义或引起语法错误。
转义的目的
JSON中的转义字符
示例
如果一个字符串包含双引号和新行,它在JSON中应该被表示为:
{
"message": "Hello \"world\"\nThis is a test."
}
在JSON字符串中,上述双引号和新行都会被正确转义,从而确保JSON数据的完整性和正确性。
总的来说,JSON转义是保证数据在传输和存储过程中完整性、准确性和跨平台兼容性的关键机制。
JSON的限制
JSON不支持注释,这可能会影响配置文件的可读性。
JSON的键名必须是字符串,这与某些语言的动态特性不符。
JSON不支持日期类型,通常需要转换为字符串表示。
Json常用工具:可解析,压缩转义格式化等
JSON在线解析及格式化验证 - JSON.cn