JavaScript

JavaScript 知识量:26 - 101 - 483

22.2 解析与序列化><

JSON的解析- 22.2.1 -

JSON可以直接被解析成JavaScript对象。在JavaScript中,可以通过使用JSON.parse()方法将JSON字符串解析为JavaScript对象。JSON.parse() 是 JavaScript 中的一个内置方法,用于将一个 JSON 格式的字符串转换为 JavaScript 对象。

使用 JSON.parse() 方法非常简单,只需要将要解析的 JSON 字符串作为参数传递给该方法即可。例如,假设有以下JSON字符串:

"{"name":"John", "age":30, "city":"New York"}"

使用JSON.parse()方法将其解析为JavaScript对象:

var jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";    
var obj = JSON.parse(jsonString);    
console.log(obj.name); // 输出 "John"      
console.log(obj.age); // 输出 30      
console.log(obj.city); // 输出 "New York"

通过解析JSON字符串为JavaScript对象,可以更方便地使用和操作其中的数据。

解析选项- 22.2.2 -

JSON.parse()方法可以接受一个可选的第二个参数,这是一个还原函数(reviver)。这个函数的作用是修改解析过程中生成的对象的属性。

这个函数的参数是一个键和一个值,对于每一个键/值对都会调用一次。这个函数返回一个新的值,如果返回undefined,那么该属性将被删除。如果返回其他值,那么该属性将被替换。

以下是一个简单的例子:

let jsonString = '{"name":"John", "age":30, "city":"New York"}';  
  
let reviver = (key, value) => {  
  if (key === 'name') {  
    return 'Jane';  
  }  
  return value;  
}  
  
let obj = JSON.parse(jsonString, reviver);  
console.log(obj);   
// 输出:{ name: 'Jane', age: 30, city: 'New York' }

在这个例子中,定义了一个还原函数reviver,它将所有的name属性替换为'Jane'。使用JSON.parse()方法解析JSON字符串时,将这个函数作为第二个参数传入。结果对象中所有的name属性都被替换为'Jane'。

JSON的序列化- 22.2.3 -

JSON的序列化(Serialization)是指将JavaScript对象转换为JSON格式的过程。这通常是通过使用JSON.stringify()方法来完成的。

JSON.stringify()方法接收一个JavaScript对象或值,然后返回一个JSON格式的字符串。例如:

var obj = {  
    name: "John",  
    age: 30,  
    city: "New York"  
};  
  
var jsonString = JSON.stringify(obj);  
console.log(jsonString);   
// 输出:{"name":"John","age":30,"city":"New York"}

在这个例子中,有一个JavaScript对象obj,它包含属性name、age和city。使用JSON.stringify()方法将其转换为JSON格式的字符串,并将结果存储在jsonString变量中。然后打印出这个字符串,结果是:{"name":"John","age":30,"city":"New York"}。

序列化选项- 22.2.4 -

JSON.stringify()方法接收的参数不止一个要序列化的对象。以下是JSON.stringify()方法的基本语法:

JSON.stringify(value, replacer, space)

参数说明:

  • value: 必需。需要序列化的值。

  • replacer: 可选。一个过滤器,可以是数组或函数。它将在序列化过程中,用于过滤对象的所有属性。如果该参数是一个数组,那么它应该包含一个按需过滤的属性名称的数组。如果该参数是一个函数,那么该函数应该返回被过滤的属性名称的值。

  • space: 可选。一个字符串或数字,用作缩进。如果它是一个字符串,它将被用作每个级别的空格。如果它是一个数字,那么空格的数量将等于这个数字。如果它被省略,那么输出将不包含任何空格或换行符。

示例如下:

let obj = {  
    name: "John",  
    age: 30,  
    city: "New York"  
};  
  
let replacer = function(key, value) {  
    if (typeof value === 'string') {  
        return value.toUpperCase();  
    } else {  
        return value;  
    }  
};  
  
let jsonString = JSON.stringify(obj, replacer, 4);  
console.log(jsonString);   
// 输出:{ "name": "JOHN", "age": 30, "city": "NEW YORK" }

在这个例子中,定义了一个过滤器replacer,它把所有字符串属性的值转换为大写。然后使用JSON.stringify()方法将对象obj序列化为JSON字符串,并使用过滤器以及缩进选项4。结果字符串中的所有字符串都被转换为大写,并且每个级别的属性之间有四个空格的缩进。