JSON Stringify示例–如何使用JS解析JSON对象

 2023-09-06 阅读 24 评论 0

摘要:There are so many programming languages, and every language has its own features. But all of them have one thing in common: they process data. From a simple calculator to supercomputers, they all work on data. 编程语言种类繁多,每种语言都有自己的功能

There are so many programming languages, and every language has its own features. But all of them have one thing in common: they process data. From a simple calculator to supercomputers, they all work on data.

编程语言种类繁多,每种语言都有自己的功能。 但是所有这些都有一个共同点:它们处理数据。 从简单的计算器到超级计算机,它们都可以处理数据。

It's the same with humans: there are so many countries, so many cultures, and so much knowledge within each community.

人类也是如此:每个社区内有如此众多的国家,如此众多的文化和众多的知识。

But to communicate with other communities, people need a common medium. Language is to humans what JSON is to programming, a common medium of data transmission.

但是,要与其他社区进行交流,人们需要一种通用的媒介。 语言对人类而言,JSON对编程而言,是一种通用的数据传输媒介。

什么是JSON? (What is JSON?)

JSON stands for JavaScript Object Notation. So before understanding JSON let's understand objects in JavaScript.

JSON代表的J ava 小号 CRIPTöbjectÑ浮选。 因此,在了解JSON之前,让我们了解JavaScript中的对象。

Every programming language has some method of storing similar data together. In C, for example, they are called structures.

每种编程语言都有一些将相似数据存储在一起的方法。 例如,在C中,它们称为结构。

In JavaScript, objects are a collection of key-value pairs, where values can be any variable (number, string, boolean), another object, or even a function. Objects are very useful in object-oriented programming.

在JavaScript中,对象是键值对的集合,其中值可以是任何变量(数字,字符串,布尔值),另一个对象,甚至是一个函数。 对象在面向对象的编程中非常有用。

Object-oriented programming is a programming paradigm based on the concept of "objects", which can contain data, in the form of fields, and code, in the form of procedures.

面向对象的编程是一种基于“对象”概念的编程范式,它可以包含字段形式的数据和过程形式的代码。

Let's look at an example.

让我们来看一个例子。

In JavaScript, objects are defined using curly braces, for example:

在JavaScript中,使用花括号定义对象,例如:

var obj = {};

Here, obj is an empty object. You can also create objects using constructors, for example:

在这里, obj是一个空对象。 您还可以使用构造函数创建对象,例如:

This would give the output Abhishek 123 18.

这将产生输出Abhishek 123 18

This is how you create objects in JavaScript. But these objects are still variables that are only specific to JavaScript.

这就是在JavaScript中创建对象的方式。 但是这些对象仍然是仅特定于JavaScript的变量。

If you want to export these objects, and for example send them to a server, you need a method to encode them. Let's see how it's done.

如果要导出这些对象,例如将它们发送到服务器,则需要一种对它们进行编码的方法。 让我们看看它是如何完成的。

JSON Stringify (JSON Stringify)

In order to transmit data from one device to another, and one language to another, we need a structured, uniform and well-defined convention.

为了将数据从一种设备传输到另一台设备,以及将一种语言传输到另一种语言,我们需要一种结构化,统一且定义明确的约定。

Though JSON is based on JS objects, certain conditions need to be valid. Luckily, you don't have to be worried about those conditions – because in JavaScript, we have a method called JSON.stringify().

尽管JSON基于JS对象,但是某些条件必须有效。 幸运的是,您不必担心这些条件–因为在JavaScript中,我们有一个名为JSON.stringify()的方法。

This method is used to convert a JS object into an encoded string which can be transmitted anywhere without losing any data.

此方法用于将JS对象转换为可在任何地方传输而不会丢失任何数据的编码字符串。

It might seem magical that any object can be encoded into a string and sent anywhere. Let's understand it more in-depth through some examples.

可以将任何对象编码为字符串并发送到任何地方似乎很神奇。 让我们通过一些示例更深入地了解它。

This is the prototype of the stringify method:

这是stringify方法的原型:

JSON.stringify(value[, replacer[, space]])

The first parameter is value which is the object you want to stringify. The second and third parameters are optional, and can be used if you want to customize how it be will encoded (for example, the separator and indentation).

第一个参数是value ,这是您要字符串化的对象。 第二个和第三个参数是可选的,如果要自定义其编码方式(例如,分隔符和缩进),可以使用该参数。

Let's try to stringify our above example.

让我们尝试对上面的示例进行分类。

function Student(name, roll_number, age) {this.name = name;this.roll_number = roll_number;this.age = age;
}var student1 = new Student("Abhishek", "123", 18);var str = JSON.stringify(student1);console.log(str);

This will give the output {"name":"Abhishek","roll_number":"123","age":18}.

这将给出输出{"name":"Abhishek","roll_number":"123","age":18}

If we use the optional parameters, that is we replace JSON.stringify(student1) with JSON.stringify(student1, null, 2), we will get something like this:

如果使用可选参数, JSON.stringify(student1)替换为JSON.stringify(student1, null, 2) ,我们将得到类似以下内容:

{"name": "Abhishek","roll_number": "123","age": 18
}

You can use these to print JSON in a readable format. Now let's try one more example.

您可以使用它们以可读格式打印JSON。 现在让我们再尝试一个示例。

Here we will be using object methods. Object methods are functions within an object which can be called with that object, using the methods in our above example:

在这里,我们将使用对象方法。 对象方法是对象中的函数,可以使用我们上面的示例中的方法,用该对象调用该方法:

function Student(name, roll_number, age) {this.name = name;this.roll_number = roll_number;this.age = age;this.print = function() {console.log(this.name, this.roll_number, this.age);}
}var student1 = new Student("Abhishek", "123", 18);student1.print();

This will give the same output as first example, that is, Abhishek 123 18.

这将提供与第一个示例相同的输出,即Abhishek 123 18

Object methods can be used to execute functions associated with an object and use the properties of the object. Let's try to stringify this object.

对象方法可用于执行与对象关联的功能并使用对象的属性。 让我们尝试对这个对象进行字符串化处理。

function Student(name, roll_number, age) {this.name = name;this.roll_number = roll_number;this.age = age;this.print = function() {console.log(this.name, this.roll_number, this.age);}
}var student1 = new Student("Abhishek", "123", 18);var str = JSON.stringify(student1);console.log(str);

It will still give you the same output,{"name":"Abhishek","roll_number":"123","age":18}.

它仍然会提供相同的输出, {"name":"Abhishek","roll_number":"123","age":18}

Thus, the object methods are ignored by the stringify function. If you want them to be transmitted too, you need to convert them to a string first.

因此,stringify函数将忽略对象方法。 如果您也希望传输它们,则需要先将它们转换为字符串。

For example, you could call student1.print = student1.print.toString() and then stringify. Then you would get something like this:

例如,您可以调用student1.print = student1.print.toString() ,然后进行字符串化。 然后,您将获得如下内容:

{"name":"Abhishek","roll_number":"123","age":18,"print":"function() {\n    console.log(this.name, this.roll_number, this.age);\n  }"}

{"name":"Abhishek","roll_number":"123","age":18,"print":"function() {\n console.log(this.name, this.roll_number, this.age);\n }"}

Let's consider another object:

让我们考虑另一个对象:

var obj = {};obj.key1 = "value1";
obj.key2 = obj;var str = JSON.stringify(obj);console.log(obj);

This will throw an error saying Uncaught TypeError: Converting circular structure to JSON.

这将引发错误消息Uncaught TypeError: Converting circular structure to JSON

This happens because key2 is referencing back to obj. Such objects are known as circular objects, and they cannot be converted to a JSON string.

发生这种情况是因为key2引用了obj。 这些对象称为循环对象,无法将它们转换为JSON字符串。

This is where the second parameter comes in handy. Although I won't demonstrate how it works here, you can find the solution on this MDN page.

这是第二个参数派上用场的地方。 尽管我不会在此处演示其工作原理,但您可以在此 MDN页面上找到解决方案。

This is how you encode JSON. Now let's see how to parse a JSON string.

这就是您编码JSON的方式。 现在,让我们看看如何解析JSON字符串。

JSON解析 (JSON parse)

Just how JavaScript has a function to stringify JSON, we also have a function to parse that stringified JSON. This is the function prototype:

JavaScript具有如何对JSON进行字符串化的功能,我们也具有对经过字符串化的JSON进行解析的功能。 这是函数原型:

JSON.parse(text[, reviver])

Here, the first parameter is the JSON string which needs to be parsed. The second parameter is optional, and can be a function to modify the parsed JSON before returning. Let's demonstrate this method using an example.

在这里,第一个参数是需要解析的JSON字符串。 第二个参数是可选的,并且可以是在返回之前修改已解析的JSON的函数。 让我们通过一个例子来演示这种方法。

function Student(name, roll_number, age) {this.name = name;this.roll_number = roll_number;this.age = age;
}var student1 = new Student("Abhishek", "123", 18);var str = JSON.stringify(student1);var parsedJSON = JSON.parse(str);console.log(parsedJSON,name. parsedJSON.roll_number, parsedJSON.age);

And the output will be Abhishek 123 18, so the JSON string was successfully parsed.

输出为Abhishek 123 18 ,因此已成功解析JSON字符串。

You could use this to send data from client to server. The data to be sent can be JSON encoded at the client and the stringified JSON will be parsed at the server and processed. This makes it really easy.

您可以使用它来将数据从客户端发送到服务器。 可以在客户端对要发送的数据进行JSON编码,并且将在服务器上解析并处理字符串化的JSON。 这真的很容易。

JSON can also be used to transmit data across different programs written in different languages. All languages have libraries to stringify and parse JSON.

JSON也可以用于跨不同语言编写的程序之间传输数据。 所有语言都具有用于对JSON进行字符串化和解析的库。

JSON与XML (JSON vs. XML)

XML or eXtensible Markup Language is a very popular way of storing and transmitting data, similar to JSON. It existed before JSON and is still widely used today.

XML或E X tensible 中号 arkup 大号 anguage是存储和传输数据,类似于JSON的一个非常受欢迎的方式。 它存在于JSON之前,如今仍被广泛使用。

For example, it's used in RSS feeds, which are still the most popular way of subscribing to some publication or author. There are also XML sitemaps which are a list of all pages on a website. And search engines use them to see if there are any new pages to be crawled.

例如,它用在RSS feed中,而RSS feed仍然是订阅某些出版物或作者的最流行方式。 也有XML网站地图,这些地图是网站上所有页面的列表。 搜索引擎使用它们来查看是否有任何新页面要爬网。

XML uses markup format – similar to HTML but much stricter.

XML使用标记格式–与HTML相似,但更为严格。

JSON and XML have various similarities and differences, as explained in the following points:

JSON和XML具有各种相似之处和区别,如以下几点所述:

  • Both are human-readable

    两者都是人类可读的
  • Both have a hierarchial structure

    两者都具有层次结构
  • Both are widely supported across various programming languages

    两者都在各种编程语言中得到广泛支持
  • Both can be fetched from the server using HTTP requests

    两者都可以使用HTTP请求从服务器获取
  • JSON is shorter than XML

    JSON比XML短
  • JSON can use arrays

    JSON可以使用数组
  • JSON can be parsed using standard JavaScript functions, whereas XML needs to be parsed using the XML DOM (which is slower)

    JSON可以使用标准JavaScript函数进行解析,而XML需要使用XML DOM进行解析(速度较慢)

The same data can be expressed in JSON and XML as follows:

可以使用JSON和XML表示相同的数据,如下所示:

JSON:

JSON:

{"employees":[{ "firstName":"Quincy", "lastName":"Larson" },{ "firstName":"Abigail", "lastName":"Rennemeyer" },{ "firstName":"Abhishek", "lastName":"Chaudhary" }
]}

XML:

XML:

<employees><employee><firstName>Quincy</firstName> <lastName>Larson</lastName></employee><employee><firstName>Abigail</firstName> <lastName>Rennemeyer</lastName></employee><employee><firstName>Abhishek</firstName> <lastName>Chaudhary</lastName></employee>
</employees>

JSON is better than XML for many reasons, but that doesn't mean we should abandon XML. Still, JSON will become the preferred form of data transmission in the future.

由于许多原因,JSON比XML更好,但这并不意味着我们应该放弃XML。 JSON仍将成为未来数据传输的首选形式。

JWT-JSON的未来 (JWT - The future of JSON)

JSON Web Token (JWT) is an open standard that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.

JSON Web令牌(JWT)是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。

JSON Web Token (JWT) is an open standard that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.

JSON Web令牌(JWT)是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象传输。

These tokens can be used to sign JSON data and verify the identity of the sender. Since the data is signed, if any data is has been tampered with you'll know it right away.

这些令牌可用于对JSON数据进行签名并验证发送方的身份。 由于数据已签名,因此如果有任何数据被篡改,您将立即知道。

Though we won't discuss the implementation in full here, we can understand how it works. A JSON Web Token consists of three parts, the header, the payload and the signature.

尽管我们不会在这里完整讨论实现,但是我们可以了解它是如何工作的。 JSON Web令牌由三部分组成:标头,有效负载和签名。

The header consists of the type of token and algorithm used, the payload consists of the data, and the signature is the value you get when you sign the header and payload together.

标头由使用的令牌和算法的类型组成,有效负载由数据组成,签名是在对标头和有效负载共同签名时获得的值。

The final token is in the form of <header>.<payload>.<signature>.

最终令牌的形式为<header>.<payload>.<signature>

These tokens are currently used in authorization and are faster and more compact than other authorization methods. These may be very useful in the future and their potential is very high.

这些令牌当前用于授权中,并且比其他授权方法更快,更紧凑。 这些在将来可能非常有用,而且潜力很大。

结论 (Conclusion)

In this article, we've seen the importance of JSON as a medium of data transfer between completely different systems, and why is it so convenient.

在本文中,我们已经了解了JSON作为在完全不同的系统之间进行数据传输的媒介的重要性,以及为什么它如此方便。

JSON is a universal medium and is not just specific to JavaScript. JSON is already used in NoSQL databases to store data in JSON format.

JSON是一种通用媒介,不仅限于JavaScript。 JSON已在NoSQL数据库中用于以JSON格式存储数据。

We also compared JSON and XML and saw why JSON is more efficient and faster than XML. In the future, we may develop even better ways of transmitting data.

我们还比较了JSON和XML,并了解了为什么JSON比XML更高效,更快。 将来,我们可能会开发出更好的数据传输方式。

The rate at which the internet is growing, efficient data transfer will be the highest priority. And JSON serves that function really well for now.

互联网的发展速度,高效的数据传输将是重中之重。 JSON目前确实很好地实现了该功能。

You can try new things with JSON and implement different data structures – it's open to innovation, and we should never stop experimenting.

您可以使用JSON尝试新事物并实现不同的数据结构-它具有创新性,我们永远都不应停止尝试。

Hope you liked my article. I have learned a lot by writing it, and your appreciation motivates me everyday, Do visit my internet home theabbie.github.io.

希望你喜欢我的文章。 通过编写它,我学到了很多东西,您的赞赏每天都会激励我,请访问我的互联网主页theabbie.github.io 。

翻译自: https://www.freecodecamp.org/news/parse-json-object-with-js-example/

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/7006.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息