JSON.stringify 的反转?

     2023-02-22     111

关键词:

【中文标题】JSON.stringify 的反转?【英文标题】:Reverse of JSON.stringify? 【发布时间】:2012-06-25 16:05:12 【问题描述】:

我正在对像 'foo': 'bar' 这样的对象进行字符串处理

如何将字符串转回对象?

【问题讨论】:

请注意,foo: 'bar' 不是有效的 JSON(虽然它是有效的 javascript 表达式)。 只需尝试 JSON.parse。如果您的浏览器不支持,请尝试 json2.js 伙计们,我们在这里和一只笑笑猫打交道。 也许我应该添加另一个(阅读第四个)答案说你应该做 JSON.parse... @RobW,原来你的谷歌链接指向这个问题作为热门话题。 #讽刺 【参考方案1】:

你需要JSON.parse()这个字符串。

var str = '"hello":"world"';
try 
  var obj = JSON.parse(str); // this is how you parse a string into JSON 
  document.body.innerHTML += obj.hello;
 catch (ex) 
  console.error(ex);

【讨论】:

专业提示:始终将 JSON.parse() 放入 try-catch 结构中,因为该方法可能会使您的 Node/Js 崩溃【参考方案2】:

这个部分解决方案怎么样?

我想存储(使用 Config 节点)一个全局 bigobj,带有数据 + 方法(作为导入外部库的替代方法),在我的流程中的许多功能节点中使用:

奇怪但有效: 全局变量“bigobj”:


some[]more[]dx:"here" , // array of objects with  array of objects. The 'Config' node requires JSON.
.....
 "get_dx": "function( d,p)   return this.some[d].more[p].dx; "  // test function

即函数的 JSON 版本....(全部在一行中:()

使用: 函数节点内部:

var bigO = global.get("bigobj");

function callJSONMethod(obj, fname, a, b, c, d)
    // see: https://***.com/questions/49125059/how-to-pass-parameters-to-an-eval-based-function-injavascript
var wrap = s => " return " + obj[fname] + " ;" //return the block having function expression
var func = new Function(wrap(obj[fname]));
return func.call( null ).call( obj, a, b, c, d); //invoke the function using arguments


msg.payload =callJSONMethod(bigO, "get_dx", 2, 2); 
return msg:

返回“这里”,难以置信!

即我必须使用 bigobj 将函数 callJSONMethod() 添加到任何功能块..... 也许可以接受。

最好的问候

【讨论】:

【参考方案3】:

JSON.stringifyJSON.parse 几乎是相反的,“通常”这种事情会起作用:

var obj = ...;
var json = JSON.stringify(obj);  
var obj2 = JSON.parse(json);

这样 obj 和 obj2 是“相同的”。

但是有一些限制需要注意。 通常,当您处理简单的对象时,这些问题并不重要。 但我会在这里说明其中的一些,使用这个辅助函数:

function jsonrepack( obj )  return JSON.parse(JSON.stringify(obj) ); 

你只会得到对象的ownProperties而失去原型:

var MyClass = function()  this.foo="foo";  
MyClass.prototype =  bar:"bar" 

var o = new MyClass();
var oo = jsonrepack(o);
console.log(oo.bar); // undefined
console.log( oo instanceof MyClass ); // false

你会失去身份:

var o = ;
var oo = jsonrepack(o);
console.log( o === oo ); // false

函数不存在:

jsonrepack(  f:function()  ); // Returns 

日期对象以字符串形式结束:

jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'

未定义的值不存在:

var v =  x:undefined 
console.log("x" in v);              // true
console.log("x" in jsonrepack(v));  // false

提供toJSON 函数的对象可能无法正常运行。

x =  f:"foo", toJSON:function() return "EGAD";  
jsonrepack(x) // Returns 'EGAD'

我确信其他内置类型也存在问题。 (所有这些都使用 node.js 进行了测试,因此根据您的环境,您的行为也可能略有不同)。

当它确实很重要时,有时可以使用JSON.parseJSON.stringify 的附加参数来克服它。例如:

function MyClass (v) 
   this.date = new Date(v.year,1,1);
   this.name = "an object";
;

MyClass.prototype.dance = function() console.log("I'm dancing"); 

var o = new MyClass(year:2010);
var s = JSON.stringify(o);

// Smart unpack function
var o2 = JSON.parse( s, function(k,v)
  if(k==="")  
     var rv = new MyClass(1990,0,0);
     rv.date = v.date;
     rv.name = v.name;
     return rv
   else if(k==="date") 
    return new Date( Date.parse(v) );
   else  return v;   );

console.log(o);             //  date: <Mon Feb 01 2010 ...>, name: 'an object' 
console.log(o.constructor); // [Function: MyClass]
o.dance();                  // I'm dancing

console.log(o2);            //  date: <Mon Feb 01 2010 ...>, name: 'an object' 
console.log(o2.constructor) // [Function: MyClass]        
o2.dance();                 // I'm dancing

【讨论】:

根据JSON SPEC "JSON 是一种完全独立于语言的文本格式,但使用 C 系列语言的程序员熟悉的约定,包括 C、C++、C#、 Java、JavaScript、Perl、Python 等等。”。对我来说,这表明 JSON 应该只用于与语言无关的类型/数据。因此,您的示例(虽然非常有效)仅与 JSON 与 JavaScript 的关联有关,并且应该更多地定义为 JSONP,而不是真正的 JSON...IMO 一个例子是 bar:"bar" (来自你的原型)是not considered valid json,因为foo是一个变量而不是一个字符串。有效的 json 需要 key 成为 string 我读到 OP 说“我将 javascript 对象转换为 JSON 字符串,现在我想将其转换回来 - 我该怎么做?”所有其他答案都说只使用JSON.parse。我只是警告说有很多情况无法正确处理。如果您使用纯原始数据(无类、原型)并且仅使用 JSON 支持的数据类型(无日期、XML、HTML 等),那么您就可以了。 同样在 Javascript 中,X = foo:"bar" X = "foo":"bar" 相同,X = ; X.foo = "bar"X=; X["foo"] = "bar" 相同,结果对象在所有 4 种情况下都是相同的。这对生成的 JSON 的有效性没有影响。 这是一个非常全面的答案,更值得被接受。感谢您的出色工作。【参考方案4】:
$("#save").click(function () 
    debugger
    var xx = [];
    var dd =  "firstname": "", "lastname": "", "address": "" ;
    var otable1 = $("#table1").dataTable().fnGetData();

    for (var i = 0; i < otable1.length; i++) 
        dd.firstname = otable1[i][0];
        dd.lastname = otable1[i][1];
        dd.address = otable1[i][2];
        xx.push(dd);
        var dd =  "firstname": "", "lastname": "", "address": "" ;
    
    JSON.stringify(alert(xx));
    $.ajax(

        url: '../Home/save',
        type: 'POST',
        data: JSON.stringify( u: xx ),
        contentType: 'application/json;',
        dataType: 'json',
        success: function (event) 
            alert(event);
            $("#table2").dataTable().fnDraw();
            location.reload();
        
    );
);

【讨论】:

【参考方案5】:

这个怎么样

var parsed = new Function('return ' + stringifiedJSON )();

对于eval,这是一个更安全的替代方案。

var stringifiedJSON = '"hello":"world"';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);

【讨论】:

【参考方案6】:

http://jsbin.com/tidob/1/edit?js,console,output

原生 JSON 对象包括两个关键方法。

1. JSON.parse()
2. JSON.stringify() 

    JSON.parse() 方法解析 JSON 字符串 - 即重建原始 JavaScript 对象

    var jsObject = JSON.parse(jsonString);

    JSON.stringify() 方法接受一个 JavaScript 对象并返回其等效的 JSON。

    var jsonString = JSON.stringify(jsObject);

【讨论】:

【参考方案7】:

看看这个。http://jsfiddle.net/LD55x/

代码:

var myobj = ;
myobj.name="javascriptisawesome";
myobj.age=25;
myobj.mobile=123456789;
debugger;
var str = JSON.stringify(myobj);
alert(str);
var obj = JSON.parse(str);
alert(obj);

【讨论】:

【参考方案8】:

推荐使用JSON.parse

你可以做一个替代方案:

 var myObject = eval('(' + myJSONtext + ')');

Json in javascript

Why is using the JavaScript eval function a bad idea?

【讨论】:

【参考方案9】:

JSON.parseJSON.stringify 的反义词。

【讨论】:

json.stringify()的深度使用

在使用JSON.stringify()对JSON数据进行序列化时1>如果里面的属性是function,则会被忽略constdata={a:‘a‘,fn:funciton(){returntrue}}JSON.stringify(data);//"{"a":"a"}"*******fn属性被忽略了**********2>如果里面的属性的值是undefined,也是会被忽略的constda 查看详情

json.parse()与json.stringify()的区别

...tling"}‘//解析对象??JSON.parse(data)结果是:?name:"goatling"JSON.stringify()【从一个对象中解析出字符串】vardata={name:‘goatling‘}JSON.stringify(data)结果是:‘{"nam 查看详情

使用 JSON.stringify 时不需要的数组索引

】使用JSON.stringify时不需要的数组索引【英文标题】:UnwantedarrayindexeswhenusingJSON.stringify【发布时间】:2012-02-1109:04:27【问题描述】:我使用JSON.stringify方法将数组传递给服务器。我有一个包含4个元素的数组:arr[10]=1;arr[20]=1;arr[30]... 查看详情

带有缩进的 JSON.Stringify [重复]

】带有缩进的JSON.Stringify[重复]【英文标题】:JSON.Stringifywithintendation[duplicate]【发布时间】:2016-09-1800:29:53【问题描述】:如何格式化一个字符串化的json对象?JSON.stringify(a:\'avalue\',b:\'bvalue\');要输出这个:a:\'valuea\',b:\'valueb\'而... 查看详情

如何删除嵌套的 JSON.stringify() 属性

】如何删除嵌套的JSON.stringify()属性【英文标题】:HowtoremovenestedJSON.stringify()properties【发布时间】:2017-08-2618:05:38【问题描述】:我正在尝试使用Typescript修改字符串。该字符串由JSON.stringify()方法创建。我想删除"inputPort"的属性"id... 查看详情

json.parse和json.stringify的作用

...意:str每个属性名都必须是双引号,不然会报错;//JSON.stringify()将一个json对象转化成字符串格式v 查看详情

json.stringify方法

用过json的应该都知道,把一个对象通过 stringify 之后提交给后台或者存储在 Storage 里是很常用的手段。但是IE6-7下没有JSON对象,所以要借助 json2.js 来实现。今天我们来简单介绍下 stringify 方法的一... 查看详情

深度使用json.stringify()

按照JSON的规范,使用JSON.stringify()做对象序列化时,如果一个属性为函数,那这个属性就会被忽略。constdata1={a:‘aaa‘,fn:function(){returntrue}}JSON.stringify(data)//结果是"{"a":"aaa"}"还有一种情况,一个属性的值为undefinedconstdata2={a:‘abc‘,... 查看详情

angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

】angular.copy()和JSON.parse(JSON.stringify())之间的区别?【英文标题】:Differencesbetweenangular.copy()andJSON.parse(JSON.stringify())?【发布时间】:2015-06-2902:18:45【问题描述】:有人能解释一下angular.copy()和JSON.parse(JSON.stringify())之间的区别吗?... 查看详情

JSON.stringify() 数组的怪异与 Prototype.js

】JSON.stringify()数组的怪异与Prototype.js【英文标题】:JSON.stringify()arraybizarrenesswithPrototype.js【发布时间】:2012-11-2502:06:51【问题描述】:我正在尝试找出我的json序列化出了什么问题,将我的应用程序的当前版本与旧版本一起使用... 查看详情

NodeJS JSON.stringify() 瓶颈

】NodeJSJSON.stringify()瓶颈【英文标题】:NodeJSJSON.stringify()bottleneck【发布时间】:2014-03-2914:21:14【问题描述】:我的服务返回非常大的JSON对象的响应-大约60MB。经过一些分析后,我发现它几乎所有时间都在执行JSON.stringify()调用,... 查看详情

json.stringify()/json.parse()

JSON.stringify()这个方法可以把javascript对象转换成json字符串。JSON.parse()这个方法可以把json字符串转换成javascript对象。【下面来看一下这两个方法的详细解答】json数据中没有变量和结尾的分号,并且数据必须是用双引号引起来的,... 查看详情

qs.stringify、qs.parse、json.stringify的使用和区别

...安装,是一个npm仓库所管理的包。importqsfrom'qs'而qs.stringify()将对象序列化成URL的形式,以&进行拼接。如图qs.parse()将URL解析成对象的形式JSON是正常类型的JSON JSON.stringify同qs.stringify()对比,功能虽然是都是序列化,但是... 查看详情

返回 Json.Stringify 结果

】返回Json.Stringify结果【英文标题】:returnJson.Stringfyresult【发布时间】:2016-09-0207:50:10【问题描述】:我有这段代码:$.getJSON(\'http://myjsonurl\',function(json)console.log(JSON.stringify(json.columns)););这会在控制台中返回我从json响应中需要的... 查看详情

json.stringify函数

摘抄,好酷的json.stringifyJSON.stringify函数(JavaScript) 将JavaScript值转换为JavaScript对象表示法(Json)字符串。语法   JSON.stringify(value[,replacer][,space])参数 value必需。  要转换的JavaScript值(通常 查看详情

在 JSON.stringify 中使用变量

】在JSON.stringify中使用变量【英文标题】:useavariableinJSON.stringify【发布时间】:2014-03-0915:22:13【问题描述】:我在我的节点restful服务器中使用stringify来提供数据:answer=JSON.stringify(activities:result,null,\'\\t\');returnanswer其中result是一... 查看详情

相当于 JSON.stringify 的 jquery [重复]

】相当于JSON.stringify的jquery[重复]【英文标题】:jqueryequivalentforJSON.stringify[duplicate]【发布时间】:2012-06-2213:17:18【问题描述】:可能重复:SerializingtoJSONinjQuery我在我的javascript代码中使用jquery作为库。但有时我必须JSON.stringify()。... 查看详情

为啥 JSON.stringify 不显示作为函数的对象属性?

】为啥JSON.stringify不显示作为函数的对象属性?【英文标题】:Whydoesn\'tJSON.stringifydisplayobjectpropertiesthatarefunctions?为什么JSON.stringify不显示作为函数的对象属性?【发布时间】:2012-05-3013:13:44【问题描述】:为什么JSON.stringify()不... 查看详情