***JSON(JavaScript对象符号法)***由于JSON是人类可读的、简单的、小尺寸的,它已经成为REST APIs事实上的序列化格式。
它使用与定义JavaScript对象相同的符号,自然,在JSON字符串和JavaScript对象之间的转换是非常直接的。
我们将处理以下的JSON字符串。
const jsonString = '{"author" : "Plato", "name" : "Republic", "releaseYear" : "375BC"}';
将JSON字符串转换为JavaScript对象
JSON 模块提供了两个方法 -stringify() ,将一个JavaScript对象变成一个JSON字符串,以及parse() ,解析一个JSON字符串并返回一个JavaScript对象。
它是内置于语言本身的,所以不需要安装或导入任何依赖关系。
const book = JSON.parse(jsonString);
console.log('Type: ', typeof book);
console.log('Contents: ', book)
这就导致了
Type: object
Contents:
{
author:"Plato",
name:"Republic",
releaseYear:"375BC"
}
eval() 你可能会想把一个字符串变成一个对象,但要警惕这种做法。
const book = eval("(" + jsonString + ")")
console.log('Type: ', typeof book);
console.log('Contents: ', book)
这样做就可以了。
Type: object
Contents:
{
author:"Plato",
name:"Republic",
releaseYear:"375BC"
}
然而,这种方法也容易受到代码注入的影响。eval() 将评估并执行你输入的任何任意文本,只要它能被运行。如果我们的jsonString 改为。
const jsonString = 'console.log("Malicious code")';
那么仅仅评估它就会导致。
const book = eval("(" + jsonString + ")")
// Malicious code
归根结底,JavaScript在很大程度上是在客户端的机器上运行的,他们可以在浏览器中评估和运行任何他们想要的代码。然而,近年来发生了一个重大的范式转变,JavaScript也越来越多地被用于服务器端。尽管代码注入的安全性最终落在了服务器端,因为你无法在前端真正防止它--有可能JavaScript也在服务器端运行。
将JSON字符串转换为JavaScript数组
尽管你可以将JSON解析成任何任意的对象--但常见的数据结构是数组,你要将数据转换为数组。JSON数组包含在方括号内,数组的元素由逗号分隔。
[element1, element2, element3]
一个元素可以是一个独立的元素,另一个JSON对象或另一个数组,而数组也可以包含任何这些类型。让我们看一下两个数组--一个是有几个元素的简单数组,一个是包含几个JSON对象的数组。
const simpleArrayJson = '["Java", "Python", "JavaScript"]';
const objectArrayJson = '[{"name": "Java", "description": "Java is a class-based, object-oriented programming language."},{"name": "Python", "description": "Python is an interpreted, high-level and general-purpose programming language."}, {"name": "JS", "description": "JS is a programming language that conforms to the ECMAScript specification."}]';
const simpleArray = JSON.parse(simpleArrayJson);
const objectArray = JSON.parse(objectArrayJson);
console.log(simpleArray);
console.log(objectArray);
这就导致了
[ "Java", "Python", "JavaScript"]
[ { name:"Java", description:"Java is a class-based, object-oriented programming language." }, { name:"Python", description:"Python is an interpreted, high-level and general-purpose programming language." }, { name:"JS", description:"JS is a programming language that conforms to the ECMAScript specification." }]
总结
在这个简短的教程中,我们看了如何将JSON字符串转换为JavaScript对象,并评论了一种可能在你的代码中引入漏洞的不良做法。