js parsing and serializing json data (2) Discussion on serialization_json
WBOY
Release: 2016-05-16 17:42:18
Original
985 people have browsed it
In the previous section, we explained the basic usage of JSON.stringify(). In this section, we will focus on serialization. In addition to the js object to be serialized, JSON.stringify() can also receive two other parameters. These two parameters are used to specify different ways to serialize the js object. The first parameter is a filter, which can be an array or a function; the second parameter is an option indicating whether to retain indentation in the JSON string. Using these two parameters alone or in combination can give you more comprehensive and in-depth control over JSON serialization. 1. Filter results If the filter parameter is an array, the result of JSON.stringify() will only contain the attributes listed in the array. For example:
The value of jsonText is {"name":"Bill"," id":"802020114"} If the second parameter is a function, the behavior will be a little different. The passed-in function receives two parameters, the attribute (key) name and the attribute value. Based on the attribute (key) name, you can know how to handle the attributes in the object to be serialized. Property names can only be strings. In order to change the result of the serialized object, the value returned by the function is the value of the corresponding key. However, be aware that if the function returns undefined, the corresponding properties will be ignored. For example:
This function filters based on the key passed in result. If the key is name, set its value to Lily; if it is grade, return undefined to delete the attribute; if it is subject, it is an array, and it is converted into a string connected by commas through the array method join() . Finally, the default item must be provided so that other values can appear in the results normally, otherwise an error will occur and there will be no results. In fact, the first time this function filter is called, the key passed in is an empty string, and the value is the student object. The value of the above jsonText is as follows: {"name":"Lily","age":12,"id":"0802020114","subject":"math,Chinese,English"} Internally It traverses each attribute of each object in order, so when public key and value function methods are used, you need to pay attention to that your function can only take effect with two parameters. To understand the purpose of the function, it is to let you know when the internal mechanism traverses each attribute. To modify some results, and traverse each object at once, so that each object in the serialized object must pass through the filter. 2. String indentation The third parameter of the JSON.stringify() method is used to control the indentation and whitespace characters in the result. If this parameter is a numeric value, it represents the number of spaces for each level of indentation. For example:
JSON.stringify()는 결과 문자열에 개행 문자를 삽입합니다. 가독성을 높이기 위해. 들여쓰기를 제어하는 유효한 매개변수 값을 전달하는 한 결과 문자열에는 줄바꿈이 포함됩니다(줄바꿈 없이 들여쓰기만 하는 것은 의미가 없습니다). 들여쓰기 간격의 최대 개수는 10입니다. 10보다 큰 값은 모두 자동으로 10으로 변환됩니다.
indent 매개변수가 숫자 값이 아닌 문자열인 경우 이 문자열은 JSON 문자열에서 들여쓰기 문자로 사용됩니다(공백은 더 이상 사용되지 않음). 예를 들어 다음과 같은 효과를 얻을 수 있습니다.
동일한 문자열의 길이는 10자를 초과할 수 없습니다. 초과하면 결과에 10자만 표시됩니다. 3. toJSON() 메서드 때때로 JSON.stringify()가 특정 객체의 사용자 정의 직렬화 요구를 충족하지 못하는 경우가 있습니다. 이러한 경우 객체에서 toJSON() 메서드를 호출하여 고유한 JSON 데이터 형식을 반환할 수 있습니다. 예:
위 코드는 학생 개체에 대해 이름과 ID의 조합을 반환하는 toJSON() 메서드를 정의합니다. jsonText의 최종 값은 다음과 같습니다. "Bill_0802020114"
toJSON()은 함수 필터의 보충으로 사용될 수 있으므로 직렬화의 내부 순서를 이해하는 것이 중요합니다. JSON.stringify()에 객체가 전달되었다고 가정하면 객체가 직렬화되는 순서는 다음과 같습니다. (1) toJSON() 메서드가 존재하고 이를 통해 유효한 값을 얻을 수 있는 경우 이 메서드를 호출합니다. 그렇지 않으면 직렬화가 기본 순서로 수행됩니다. (2) 두 번째 매개변수가 제공되면 이 함수 필터를 적용합니다. 함수 필터에 전달된 값은 단계 (1)에서 반환된 값입니다. (3) (2) 단계에서 반환된 각 값을 적절하게 직렬화합니다. (4) 세 번째 매개변수가 제공되면 해당 포맷을 수행합니다. toJSON() 메서드 적정을 고려하거나, 함수 필터 사용을 고려하거나, 둘 다 사용해야 하는 경우, 이 순서를 이해하는 것이 중요합니다.
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn