我有一个 JSON 对象,如下所示:
string str = '[
{
"name": "data-input1",
"type": "Element [in]",
"description": "data-input1",
"getConnectorPosition": "function (element) { return {x: 0, y: Math.floor(element.rectangle.width / 2)} }"
},
{
"name": "data-output1",
"type": "Element [out] [array]",
"description": "data-output1",
"getConnectorPosition": "function (element) { return {x: Math.floor(element.rectangle.width), y: Math.floor(element.rectangle.height / 2)} }"
}
]';
我想将此字符串解析为一个对象。
我收到此错误:
Uncaught TypeError: string is not a function
当调用 getConnectorPosition 方法时。
阅读之前的问题,我了解到 JSON 中的函数并不完全“合法”,并且错误也表明了这一点。
确切地说,我如何正确解析包含函数(如上所述)的 JSON 对象,然后调用这些函数?
最佳答案
抛出错误是因为在 JavaScript 中您没有将变量声明为某种类型,而是始终使用 var
关键字。如果将 string str
更改为 var str
那么当前的错误将会消失。
然后,您需要确保您的字符串是单行,或者转义文字换行符,因为 JavaScript 无法处理多行字符串:
var str = '[\
{ "name": "data-input1", \
"type": "Element [in]", \
无论如何,假设您正确声明了 str
,并且单行或转义换行符,您可以正常解析它:
var obj = JSON.parse(str);
并以字符串形式访问您的函数,如下所示:
obj[0].getConnectorPosition;
要实际使用您的函数,您必须评估它们:
eval(obj[0].getConnectorPosition)
与
相同function (element) { return { x: 0, y: Math.floor(element.rectangle.width / 2) } }
更现代的更新(ES6+):
您可以使用 let
和 const
定义变量,声明为 const
的变量以后不能更改,而 let
优于 var
,因为它的范围更安全。
您还可以使用模板字符串文字来表示多行字符串。
所以你可以写:
const str = `[
{
"name": "data-input1",
"type": "Element [in]",
"description": "data-input1",
"getConnectorPosition": "function (element) { return {x: 0, y: Math.floor(element.rectangle.width / 2)} }"
},
{
"name": "data-output1",
"type": "Element [out] [array]",
"description": "data-output1",
"getConnectorPosition": "function (element) { return {x: Math.floor(element.rectangle.width), y: Math.floor(element.rectangle.height / 2)} }"
}
]`;
关于javascript - 如何解析包含函数的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28140728/