Inverse de JSON.stringify?

Je suis stringyfing un objet comme {'foo': 'bar'}

Comment puis-je retourner la chaîne à un objet?

266
demandé sur sohnryang 2012-06-23 22:00:19

8 réponses

Vous devez JSON.parse() la chaîne de caractères.

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);
}
401
répondu Chase Florell 2015-10-26 14:58:26

JSON.parse est le contraire de JSON.stringify.

61
répondu Niet the Dark Absol 2012-06-23 18:01:28

JSON.stringify et JSON.parse sont presque oposites, et "généralement" ce genre de chose fonctionne:

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

De sorte que obj et obj2 sont "identiques".

Cependant, il y a certaines limites à connaître. Souvent, ces problèmes n'ont pas d'importance car vous avez affaire à des objets simples. Mais je vais illustrer certains d'entre eux ici, en utilisant cette fonction d'aide:

function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
  • Vous obtiendrez seulement ownProperties de l'objet et perdrez des prototypes:

    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
    
  • Tu vas perdre identité:

    var o = {};
    var oo = jsonrepack(o);
    console.log( o === oo ); // false
    
  • Les fonctions ne survivent pas:

    jsonrepack( { f:function(){} } ); // Returns {}
    
  • Les objets de Date finissent sous forme de chaînes:

    jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
    
  • Les valeurs non définies ne survivent pas:

    var v = { x:undefined }
    console.log("x" in v);              // true
    console.log("x" in jsonrepack(v));  // false
    
  • Les objets qui fournissent une fonction toJSON peuvent ne pas se comporter correctement.

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

Je suis sûr qu'il y a aussi des problèmes avec d'autres types intégrés. (Tout cela a été testé en utilisant node.js vous pouvez donc avoir un comportement légèrement différent en fonction de votre environnement trop).

Quand c'est important, il peut parfois être surmonté en utilisant les paramètres supplémentaires de JSON.parse et JSON.stringify. Par exemple:

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
55
répondu Michael Anderson 2017-03-23 01:26:04

Est Recommandé d'utiliser JSON.parse

Il y a une alternative que vous pouvez faire :

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

Json en javascript

Pourquoi utiliser la fonction JavaScript eval est-elle une mauvaise idée?

5
répondu Mina Gabriel 2017-05-23 11:47:26

Http://jsbin.com/tidob/1/edit?js,console,sortie

L'objet JSON natif inclut deux méthodes clés.

1. JSON.parse()
2. JSON.stringify() 
  1. La méthode JSON.parse() Analyse une chaîne JSON-c'est-à-dire la reconstruction de L'objet JavaScript d'origine

    var jsObject = JSON.parse(jsonString);

  2. JSON.la méthode stringify () accepte un objet JavaScript et renvoie son équivalent JSON.

    var jsonString = JSON.stringify(jsObject);

5
répondu Shaik Rasool 2014-09-02 09:46:31

Que diriez - vous de ceci

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

C'est une alternative plus sûre pour les eval.

var stringifiedJSON = '{"hello":"world"}';
var parsed = new Function('return ' + stringifiedJSON)();
alert(parsed.hello);
5
répondu Exception 2014-10-30 12:56:01

Regarde ça.
http://jsfiddle.net/LD55x/

Code:

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);
2
répondu Manish Gupta 2014-08-05 06:30:43
$("#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();
        }
    });
});
-2
répondu suresh64 2016-06-04 10:51:18