当我们将数据发送到后端服务器时,为什么需要将对象转换为JSON?

时间:2017-09-29 20:21:08

标签: json

我只知道我们从后端服务器获取数据为JSON格式。首先,为什么后端服务器返回JSON(或过去的XML)而不是对象?当我们想要在客户端处理数据时,为什么我们需要将JSON转换为对象?同样,当我们想要将数据发送回后端服务器时,为什么我们需要将对象转换为JSON?

这是一些引用引用(jfiddle):“JSON Parser还提供了另一个非常有用的方法stringify。此方法接受一个JavaScript对象作为参数,并输出一个JSON格式的字符串。 strong>当您想要将数据发送回服务器时,这非常有用:“

问题1:为什么它有用?

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

问题2:为什么服务器端(后端)无法使用对象但必须使用JSON?

问题3:为什么客户端(前端)无法使用JSON但必须反对?

2 个答案:

答案 0 :(得分:1)

您所有问题的答案是:

HTTP不以二进制形式通信,因此您无法来回发送对象。相反,他们需要转换为一些基于文本的系统。 (Base64很常见......还有其他的)。

JSON不是必需的,但它通常用于HTTP通信,因为它很容易与JavaScript对象进行转换。

答案 1 :(得分:1)

在JavaScript中,可以将格式正确的JSON字符串转换为对象。要符合条件,它必须是正确的形状,如下所示:

{
    "property1": "value1",
    "property2": "value2",
    "property3": "value3",
}

作为字符串,它看起来像这样:

const json = "{ "property1": "value1", "property2": "value2", "property3": "value3" }"

之外,你不能以这种方式使用引号,否则JavaScript解释器会被搞砸,所以你必须逃避它们:

const json = "{ \"property1\": \"value1\", \"property2\": \"value2\", \"property3\": \"value3\" }"

这就是实用程序JSON.stringify()的功能。它将其变成运输安全的形状。如果要将其转换回对象,请使用JSON.parse()

在JavaScript中,您可以执行以下操作:

const object = {
    name: 'Bob',
    age: 1337,
    color: 'neon brown'
}

// I would like to send this to the Frontend now:
const preparedObject = JSON.stringify(object)

// Send it to the Frontend now
sendToFront({ payload: preparedObject })

// Lets pretend the Frontend does this:
const objectFromBackEnd = response.payload

// The Frontend gets it, but it is just a string it can't do anything with, so now we need:
const getObjectBack = JSON.parse(preparedObject)
if (getObjectBack.name === 'Bob') {
    console.log('it worked')
}
// 'it worked'

在实践中,您parse的次数必须与stringify完全相同,否则JavsScript将无法将字符串化对象转换回文字形式。

我相信你可以想象,如果双引号内的双引号内有双引号,它会变得多么糟糕。 JavaScript可能同样困惑。

要专门回答您的问题,后端(如果它使用的是JavaScript)可以并且只能用于对象。对于前端也是如此,所以问题2和3的答案都是,但你必须确保它们被正确解释。

如果对非对象执行JSON.stringify(),则会抛出错误。

如果JSON.parse()对格式不正确的JSON字符串执行操作,则会产生错误。

JSON非常出色,因为它为人类读者提供了超级友好的格式,对非JavaScript机器读者非常友好。与XML和其他类型的完成同样的事情相比,它既人性又机器友好。

您缺少的链接是您需要内化JSON.stringify()JSON.parse()的工作方式。稍微测试一下,删除一些",:个字符,看看它们是如何回应的。

也可以尝试:

    const object = {
        name: 'Bob',
        age: 1337,
        color: 'neon brown'
    }

    console.log('Test 1', JSON.stringify(object))

    console.log('Test 2', JSON.stringify(JSON.stringify(object)))

    console.log('Test 3', JSON.stringify(JSON.stringify(JSON.stringify(object))))

    //Now try adding this after:

    console.log(JSON.parse(JSON.parse(JSON.parse(JSON.stringify(JSON.stringify(JSON.stringify(object)))))))

这对任何编程语言都很有用,因为如果你的程序输出一个有效的JSON字符串,那么创建它的方式并不重要。我只是从我的JavaScript代码中做JSON.parse('string')并开始使用点表示法读取它并迭代JSON“对象”中的所有内容。

您可以在此处阅读更多内容:http://www.json.org/