In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erklärung von JSON-Objekten vorgestellt und einfache Beispielcodes angehängt, um allen beim Lernen und Nachschlagen zu helfen. Freunde in Not können sich auf die vorherigen Wörter beziehen
Der vollständige Name von JSON (Javascript Object Notation) ist Javascript Object Notation. Es handelt sich um ein Textformat für den Datenaustausch, nicht um eine Programmiersprache, die zum Lesen strukturierter Daten verwendet wird. Es wurde 2001 von Douglas Crockford mit dem Ziel vorgeschlagen, das umständliche und umständliche XML-Format zu ersetzen. In diesem Artikel wird der Inhalt von JSON ausführlich vorgestellt.
Grammatikregeln
Die Syntax von JSON kann die folgenden drei Arten von Werten darstellen
[1] Einfacher Wert
Einfache Werte verwenden dieselbe Syntax wie JavaScript und können Zeichenfolgen, numerische Werte, boolesche Werte und Nullen in JSON darstellen
Zeichenfolgen müssen durch doppelte Anführungszeichen dargestellt werden. Einfache Anführungszeichen können nicht verwendet werden. Der Wert muss dezimal ausgedrückt werden und NaN und Infinity können nicht verwendet werden
[Hinweis] JSON unterstützt den in JavaScript undefinierten Sonderwert
//合格的简单值 5 "hello world" true null
//不合格的简单值 +0x1 'hello world' undefined NaN Infinity
[2] Objekt
<🎜 nicht > Ein komplexer Datentyp, der eine geordnete Menge von Schlüssel-Wert-Paaren darstellt. Der Wert in jedem Schlüssel-Wert-Paar kann ein einfacher Wert oder ein komplexer Datentypwert sein Im Vergleich zu JavaScript-Objektliteralen weist JSON drei Unterschiede auf 1. JSON hat kein Variablenkonzept 2. In JSON muss der Schlüsselname des Objekts in doppelte Anführungszeichen gesetzt werden 3. Da JSON keine Javascript-Anweisung ist, gibt es am Ende kein Semikolon [Hinweis] Zwei Eigenschaften mit demselben Namen sollten nicht im selben Objekt erscheinen//合格的对象 { "name":"huochai", "age":29, "school":{ "name":"diankeyuan", "location":"beijing" } }
//不合格的对象 { name: "张三", 'age': 32 }//属性名必须使用双引号 {};//不需要末尾的分号 { "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'), "getName": function() { return this.name; } } // 不能使用函数和日期对象
[Hinweis] IE7-Browser unterstützt nicht
Es gibt zwei JSON-Objekte Methoden: stringify() und parse(). Diese beiden Methoden werden verwendet, um JavaScript-Objekte in JSON-Strings zu serialisieren und JSON-Strings in native JavaScript-Werte zu analysieren. Die JSON.stringify()-Methode wird zum Konvertieren eines Werts in verwendet eine Zeichenfolge. Die Zeichenfolge sollte dem JSON-Format entsprechen und kann mit der JSON.parse()-Methode wiederhergestellt werden. Standardmäßig enthält die von JSON.stringify() ausgegebene JSON-Zeichenfolge keine Leerzeichen oder Einrückungen
var jsonObj = { "title":"javascript", "group":{ "name":"jia", "tel":12345 } }; //{"title":"javascript","group":{"name":"jia","tel":12345}} JSON.stringify(jsonObj);
Spezifische Konvertierung
JSON.stringify('abc') // ""abc"" JSON.stringify(1) // "1" JSON.stringify(false) // "false" JSON.stringify([]) // "[]" JSON.stringify({}) // "{}" JSON.stringify([1, "false", false])// '[1,"false",false]' JSON.stringify({ name: "张三" })// '{"name":"张三"}'
JSON.stringify(/foo/) // "{}" JSON.stringify(Math) // "{}"
JSON.stringify(new Boolean(true)) //"true" JSON.stringify(new String('123')) //""123"" JSON.stringify(new Number(1)) //"1" JSON.stringify(new Date()) //""2016-09-20T02:26:38.294Z""
JSON.stringify({ a: function(){}, b: undefined, c: [ function(){}, undefined ] }); // "{"c":[null,null]}"
var obj = {}; Object.defineProperties(obj, { 'foo': { value: 1, enumerable: true }, 'bar': { value: 2, enumerable: false } }); JSON.stringify(obj); // {"foo":1}]
Parameter
JSON.stringify() außer für die Serialisierung Zusätzlich zum JavaScript-Objekt kann es auch zwei weitere Parameter empfangen, mit denen verschiedene Arten der Serialisierung des JavaScript-Objekts angegeben werden. Der erste Parameter ist ein Filter, der ein Array oder eine Funktion sein kann; der zweite Parameter ist eine Option, die angibt, ob die Einrückung in der JSON-Zeichenfolge beibehalten werden soll [Array-Filter] Wenn die Der zweite Parameter der stringify()-Methode ist ein Array. Dies entspricht der Implementierung der Funktion eines Filters [1] Der Filter ist nur für die Attribute der ersten Ebene des Objekts wirksam
var jsonObj = { "title":"javascript", "group":{ "a":1 } }; //{"group":{"a":1}} console.log(JSON.stringify(jsonObj,["group","a"]))
var jsonObj =[1,2]; JSON.stringify(jsonObj,["0"])//"[1,2]"
JSON.stringify({a:1,b:2}, function(key, value){ if (typeof value === "number") { value = 2 * value; } return value; }) // "{"a":2,"b":4}"
JSON.stringify({a: {b: 1}}, function (key, value) { console.log("["+ key +"]:" + value); return value; }) // []:[object Object] // [a]:[object Object] // [b]:1 // '{"a":{"b":1}}'
JSON.stringify({ a: "abc", b: 123 }, function (key, value) { if (typeof(value) === "string") { return undefined; } return value; }) // '{"b": 123}'
/*"{ "p1": 1, "p2": 2 }"*/ JSON.stringify({ p1: 1, p2: 2 }, null, 2); //"{"p1":1,"p2":2}" JSON.stringify({ p1: 1, p2: 2 }, null, 0); /*"{ |-"p1": 1, |-"p2": 2 }"*/ JSON.stringify({ p1:1, p2:2 }, null, '|-'); toJSON()
JSON.stringify({ toJSON: function () { return "Cool" } }) // ""Cool""
var o = { foo: 'foo', toJSON: function() { return 'bar'; } }; JSON.stringify({x: o});// '{"x":"bar"}'
如果toJSON()方法返回undefined,此时如果包含它的对象嵌入在另一个对象中,会导致该对象的值变成null。而如果包含它的对象是顶级对象,结果就是undefined
JSON.stringify({ toJSON: function () { return undefined } }) //undefined
Date对象部署了一个自己的toJSON方法,自动将Date对象转换成日期字符串
JSON.stringify(new Date("2016-08-29")) // "2016-08-29T00:00:00.000Z"
toJSON方法的一个应用是,可以将正则对象自动转为字符串
RegExp.prototype.toJSON =RegExp.prototype.toString; JSON.stringify(/foo/)// ""/foo/""
toJSON()可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下
1、如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化
2、如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第一步返回的值
3、对第二步返回的每个值进行相应的序列化
4、如果提供了第三个参数,执行相应的格式化
parse()
JSON.parse方法用于将JSON字符串转化成对象
JSON.parse('{}') // {} JSON.parse('true') // true JSON.parse('"foo"') // "foo" JSON.parse('[1, 5, "false"]') // [1, 5, "false"] JSON.parse('null') // null var o = JSON.parse('{"name": "张三"}'); o.name // 张三
如果传入的字符串不是有效的JSON格式,JSON.parse方法将报错
//Uncaught SyntaxError: Unexpected token u in JSON at position 0(…)
JSON.parse("'String'")
//Uncaught SyntaxError: Unexpected token u in JSON at position 0(…)
JSON.parse("undefined")
JSON.parse()方法也可以接收一个函数参数,在每个键值对儿上调用,这个函数被称为还原函数(reviver)。该函数接收两个参数,一个键和一个值,返回一个值
如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中
var o = JSON.parse('{"a":1,"b":2}', function(key, value) { if (key === ''){ return value; } if (key === 'a') { return value + 10; } }); o.a // 11 o.b // undefinef
在将日期字符串转换为Date对象时,经常要用到还原函数
var book = { "title": "javascript", "date": new Date(2016,9,1) } var jsonStr = JSON.stringify(book); //'{"title":"javascript","date":"2016-09-30T16:00:00.000Z"}'' console.log(jsonStr) var bookCopy = JSON.parse(jsonStr,function(key,value){ if(key == 'date'){ return new Date(value); } return value; }) console.log(bookCopy.date.getFullYear());//2016
eval()
实际上,eval()类似于JSON.parse()方法,可以将json字符串转换为json对象
eval('(' + '{"a":1}'+')').a;//1 JSON.parse('{"a":1}').a;//1
但是,eval()可以执行不符合JSON格式的代码,有可能会包含恶意代码
eval('(' + '{"a":alert(1)}'+')').a;//弹出1 JSON.parse('{"a":alert(1)}').a;//报错
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
详细为你解读JavaScript字符集编码与解码(图文教程)
Das obige ist der detaillierte Inhalt vonJSON-Objekt (grafisches Tutorial, einfach und grob). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!