gpt4 book ai didi

javascript - Json 中的解析函数

转载 作者:行者123 更新时间:2023-11-30 10:05:45 25 4
gpt4 key购买 nike

我有这个 JSON 作为函数 JSON.stringify() 的结果:

{"get":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if('object'==typeof g)for(h in g)i[h]=g[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||d,i.oauthio={provider:a,tokens:b,request:c},e.http(i)}","post":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if('object'==typeof g)for(h in g)i[h]=g[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||d,i.oauthio={provider:a,tokens:b,request:c},e.http(i)}"}

如何看出值中有函数。我想重建这个 JavaScript 对象,我的目标是删除结果中的引号以及值;因为在这种情况下,函数被识别为字符串。我想要这样的东西:{key : value}

现在我得到:{key : "value"}

最佳答案

快速回答:

下面的函数可以做到这一点:

function fix(obj){

for (var property in obj) {
if (obj.hasOwnProperty(property)) {
obj[property] = eval("(" + obj[property] + ")");
}
}

}

如果 obj 有您的 JSON 解析对象,那么只需执行以下操作:

fix(obj);
console.log(obj); // in case you want to see the change in the console

说明(如果您需要):

如果在调用 eval 之前用括号“()”将字符串括起来,您将能够获得 javascript 函数表达式。

所以达到预期结果的步骤是:

  1. 将函数表达式字符串括在括号中(原因见脚注)
  2. 调用eval函数对函数声明表达式求值
  3. 将函数声明表达式分配给包含字符串值的同一属性

对于您给出的简单示例,您可以通过以下方式获得所需的结果:

var obj = {"get":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if('object'==typeof g)for(h in g)i[h]=g

[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||d,i.oauthio=

{provider:a,tokens:b,request:c},e.http(i)}","post":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if

('object'==typeof g)for(h in g)i[h]=g[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||

d,i.oauthio={provider:a,tokens:b,request:c},e.http(i)}"};

obj.get = eval("(" + obj.get + ")");
obj.post = eval("(" + obj.post + ")");

您可以使用以下函数将其自动化:

function fix(obj){

for (var property in obj) {
if (obj.hasOwnProperty(property)) {
obj[property] = eval("(" + obj[property] + ")");
}
}

}

你的最终代码应该是这样的:

function fix(obj){

for (var property in obj) {
if (obj.hasOwnProperty(property)) {
obj[property] = eval("(" + obj[property] + ")");
}
}

}


var obj = {"get":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if('object'==typeof g)for(h in g)i[h]=g

[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||d,i.oauthio=

{provider:a,tokens:b,request:c},e.http(i)}","post":"function (f,g){'use strict';var h,i;if(i={},'string'==typeof f){if

('object'==typeof g)for(h in g)i[h]=g[h];i.url=f}else if('object'==typeof f)for(h in f)i[h]=f[h];return i.type=i.type||

d,i.oauthio={provider:a,tokens:b,request:c},e.http(i)}"};

fix(obj);

脚注:

如果您想知道为什么需要括号,请查看以下链接:

Why does JavaScript's eval need parentheses to eval JSON data?

关于javascript - Json 中的解析函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com