我有一个看起来像这样的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)} }"
}
]`;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句