簡體   English   中英

JSON.parse()如何工作?

[英]How does JSON.parse() work?

我沒有在javascript上工作​​太多。 而且,我需要解析一個JSON字符串。 所以,我想知道JSON.parse究竟是做什么的。 例如:如果我將json字符串分配給這樣的變量,

var ab = {"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}};

現在,當我打印'ab'時,我得到一個對象。

同樣當我這樣做時:

var pq = '{"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}}';
var rs = JSON.parse(pq);

'rs'與'ab'是同一個對象。 那么兩種方法的區別是什么,JSON.parse有什么不同呢?

這可能是一個愚蠢的問題。 但如果有人能夠解釋這一點會有所幫助。

謝謝。

這是我對jsfiddle的解釋。

//this is already a valid javascript object
//no need for you to use JSON.parse()
var obj1 = {"name":"abcd", "details":"1234"};
console.log(obj1);

//assume you want to pass a json* in your code with an ajax request
//you will receive a string formatted like a javascript object
var str1 = '{"name":"abcd", "details":"1234"}';
console.log(str1);

//in your code you probably want to treat it as an object
//so in order to do so you will use JSON.parse(), which will
//parse the string into a javascript object
var obj2 = JSON.parse(str1);
console.log(obj2);

JSON或JavaScript Object Notation是用於構造數據的最小可讀格式。 它主要用於在服務器和Web應用程序之間傳輸數據,作為XML的替代方案。

Javascript對象是Javascript中的數據類型 - 它具有您在第一個示例中定義的屬性和值對。

var ab = {"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}};

現在什么是Json:JSON字符串是一種數據交換格式 - 它只不過是一堆特定方式的字符(為了讓不同的程序相互通信)

var pq = '{"name":"abcd", "details":{"address":"pqrst", "Phone":1234567890}}';

所以這是一個帶有json格式的字符串。

最后JSON.parse()返回與給定JSON文本對應的Object。

你的'ab'變量不是字符串,它是一個合適的javascript對象,因為你在它周圍使用了{}。 如果你將整個東西包裹在“”中那么它將是一個字符串並將打印成一行。

數據類型!! 這就是答案。 在這種情況下, ab是一個對象,pq是一個字符串(含糊地說)。 打印只是一個將“任何”顯示為字符串的操作。 但是,你必須以不同的方式看待這兩者。 字符串本身是一個對象,它具有與之關聯的屬性和方法。 在這種情況下, pq就像一個具有值的對象: {“name”:“abcd”,“details”:{“address”:“pqrst”,“Phone”:1234567890}}例如,它有一個名為length的屬性,其值為66.但是ab是一個對象,您可以將名稱詳細信息視為其屬性。

JSON.parse()做的不同之處在於它將該字符串解析(轉換)為對象。 並非所有字符串都可以解析為對象。 嘗試傳遞{“name”:“abc” ,JSON.parse將拋出異常。

在解析之前, pq沒有任何屬性名稱 如果你做了類似pq.name的事情,那么它將返回你未定義的內容 但是當你使用JSON.parse()解析它時, rs.name將返回字符串“abcd”。 但是rs不再具有屬性長度 ,因為它不是字符串。 如果您嘗試了rs.length,那么您將得到一個未定義的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM