20. Introducción a JSON

20. Introducción a JSON

JSON es un subconjunto estricto de JavaScript y utiliza algunos patrones en JavaScript para representar datos estructurados.
Respecto a JSON, lo más importante es entender que es un formato de datos, no un lenguaje de programación. Aunque tiene la misma forma gramatical, JSON no está subordinado a JavaScript. Además, JSON no solo lo usa JavaScript, después de todo, JSON es solo un formato de datos. Muchos lenguajes de programación tienen analizadores y serializadores para JSON.

1.sintaxis JSON

La sintaxis de JSON puede representar los siguientes tres tipos de valores.

  • Valores simples: con la misma sintaxis que JavaScript, las cadenas, los números, los valores booleanos y los valores nulos se pueden representar en JSON.
    Pero JSON no admite el valor especial indefinido en JavaScript.
  • Objeto: como tipo de datos complejo, un objeto representa un conjunto de pares clave-valor desordenados. El valor de cada par clave-valor puede ser un
    valor simple o un valor de un tipo de datos complejo.
  • Array: Array también es un tipo de datos complejo, que representa un conjunto de lista ordenada de valores, se puede acceder a los valores a través del índice numérico
    . El valor de una matriz también puede ser de cualquier tipo, objeto o matriz simple.

JSON no admite variables, funciones o instancias de objetos. Es un formato para representar datos estructurados. Aunque tiene la misma sintaxis que JavaScript para representar datos, no se limita al alcance de JavaScript.

1.1 Valor simple

La forma más simple de datos JSON es un valor simple. Como cadenas, números.

1.2 Objetivo

Los objetos en JSON son ligeramente diferentes de los literales de JavaScript. como sigue:

La representación JSON de los objetos es la siguiente:

{
    
    
    "name": "Nicholas",
    "age": 29
}

A diferencia de JavaScript, los nombres de propiedad de los objetos en JSON deben estar entre comillas dobles en todo momento. Al escribir JSON a mano,
es un error común olvidar agregar comillas dobles al nombre de la propiedad del objeto o escribir comillas dobles como comillas simples.

1.3 Matriz

En JSON, se puede usar la misma sintaxis para representar la misma matriz:

[25, "hi", true]

También tenga en cuenta que no hay variables ni punto y coma para las matrices JSON. La combinación de matrices y objetos puede formar colecciones de datos más complejas,

2. Análisis y serialización de JSON

¿Por qué se necesita JSON para la conversión?

La razón por la que JSON es popular no es la única razón para tener una sintaxis similar a JavaScript. Una razón más importante es que la
estructura de datos JSON se puede analizar en objetos útiles de JavaScript. En comparación con la estructura de datos XML que se va a analizar en un documento DOM y extraer datos de él es extremadamente problemático, la ventaja de JSON que se puede analizar en un objeto JavaScript es extremadamente obvia. Tomemos como ejemplo la estructura de datos JSON de un grupo de libros de la sección anterior. Después de analizarse como un objeto JavaScript, el título del tercer libro se puede obtener con la siguiente línea de código simple:
libros [2]. Título
Por supuesto, Aquí se supone que el objeto obtenido después de analizar la estructura de datos JSON se guarda en los libros de variables. Eche un vistazo al siguiente código para encontrar datos en la estructura DOM:
doc.getElementsByTagName ("libro") [2] .getAttribute ("título")
Observe estas llamadas a métodos redundantes, no es difícil entender por qué los desarrolladores de JavaScript pueden obtener JSON Una cálida bienvenida. Desde entonces, JSON se ha convertido en el estándar de facto para el intercambio de datos en el desarrollo de servicios web.

2.1 objeto JSON

Los objetos JSON son variables globales definidas por Javascript.
El objeto JSON tiene dos métodos: stringify () y parse () . En el caso más simple, estos dos métodos se utilizan para
serializar objetos JavaScript en cadenas JSON y analizar cadenas JSON en valores JavaScript nativos.

2.2 Opciones de serialización

De hecho, además del objeto JavaScript que se va a serializar, JSON.stringify () también puede recibir otros
dos parámetros, que se utilizan para especificar diferentes formas de serializar el objeto JavaScript. El primer parámetro es un filtro, que puede ser una matriz o
una función; el segundo parámetro es una opción que indica si se debe mantener la sangría en la cadena JSON. Estos dos
parámetros se pueden usar solos o en combinación para controlar la serialización de JSON de manera más completa y profunda.
1. Filtrar el resultado
Si el parámetro de filtro es una matriz, el resultado de JSON.stringify () solo contendrá los atributos enumerados en la matriz.

var book = {
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
};

var jsonText = JSON.stringify(book, ["title", "edition"]);

Si el segundo parámetro es una función, el comportamiento será ligeramente diferente. La función entrante recibe dos parámetros, el nombre del atributo (clave) y el valor del atributo. Raíz de
acuerdo con el nombre de la propiedad (clave) debe saber cómo manejar la serialización de los atributos del objeto. El nombre del atributo solo puede ser una cadena, y cuando el valor no es el
valor de una estructura de par clave-valor, el nombre de la clave puede ser una cadena vacía.

Sin embargo, tenga en cuenta que si la función devuelve undefined, se ignorarán las propiedades correspondientes. Veamos un ejemplo.

var book = {
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
    };
    
var jsonText = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
            return value.join(",")
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default:
            return value;
    }   
});

2.
Sangría de cadena El tercer parámetro del método JSON.stringify () se utiliza para controlar la sangría y los espacios en blanco en el resultado. Si este parámetro es un valor numérico, representa el número de espacios para cada nivel de sangría.
Si el parámetro de sangría es una cadena en lugar de un valor numérico, esta cadena se utilizará como un carácter de sangría en la cadena JSON (los
espacios ya no se utilizan). En el caso de utilizar una cadena, puede establecer el carácter de sangría en un carácter de tabulación, o cualquier carácter como dos guiones

2.3 Opciones de análisis

El método JSON.parse () también puede recibir otro parámetro, que es una función que se llamará en cada par clave-valor. Para distinguir la función de reemplazo (filtrado) (reemplazador) recibida por JSON.stringify (), esta función se llama restaurador, pero de hecho las firmas de estas dos funciones son las mismas: ambas reciben dos parámetros, Una clave y un valor, y ambos deben devolver un
valor.
Si la función de restauración devuelve undefined, significa que la clave correspondiente debe eliminarse del resultado; si devuelve otro valor, el valor se inserta en el resultado. Al convertir una cadena de fecha en un objeto de fecha, a menudo se utiliza la función de restauración. P.ej:

var book = {
    "title": "Professional JavaScript",
    "authors": [
        "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011,
    releaseDate: new Date(2011, 11, 1)
    };
    
var jsonText = JSON.stringify(book);

var bookCopy = JSON.parse(jsonText, function(key, value){
    if (key == "releaseDate"){
        return new Date(value);
    } else {
        return value;
    }
};

resumen

JSON es un formato de datos ligero que puede simplificar la carga de trabajo de representar estructuras de datos complejas. JSON utiliza
un subconjunto de sintaxis de JavaScript para representar objetos, matrices, cadenas, números, valores booleanos y nulos. Incluso XML puede representar los mismos resultados de datos complejos, pero
JSON es menos engorroso y es más conveniente de usar en JavaScript.

ECMAScript 5 define un objeto JSON nativo, que se puede utilizar para serializar objetos en cadenas JSON o
analizar datos JSON en objetos JavaScript. Los métodos JSON.stringify () y JSON.parse () se utilizan para implementar las dos funciones anteriores respectivamente.
Estos dos métodos tienen algunas opciones, a través de las cuales puede cambiar el método de filtrado o cambiar el proceso de serialización.

Código de prueba

// json转换js对象为json字符串
var book = {
	title: "js",
	authors: ["Nike"],
	edition: 3,
	year: 2011,
};

var JsonText = JSON.stringify(book, ["title", "authors"], 4);

// json第二个参数使用方法实例
var book = {
	title: "js",
	authors: ["Nike"],
	edition: 3,
	year: 2011,
}

var jsonText = JSON.stringify(book, function(key, value){
	switch(key){
		case "authors":
			return value.join(".");

		case "year":
			return 5000;

		case "edition":
			return undefined;

		default:
			return value;
	}
});

// 解析json
var book = {
	title: "js",
	authors: ["Nike"],
	edition: 3,
	year: 2011,
	releaseDate: new Date(2019, 6, 4)
};



function(key, value){if (key == "releaseDate"){ return new Date(value);} else { return value;}}



var book = {
	title: "js",
	authors: ["Nike"],
	edition: 3,
	year: 2011,
	releaseDate: new Date(2019, 6, 4),
};


var book2 = JSON.parse(jsonText, function(key, value){
	if (key == "releaseDate"){ 
		return new Date(value);
	} else { 
		return value;
	}});

Supongo que te gusta

Origin blog.csdn.net/sinat_23931991/article/details/90813601
Recomendado
Clasificación