Come creare e duplicare un oggetto JSON?

Mi chiedevo come posso creare un file JSON (JS) oggetto e poi clonarlo.

  • Perché “non [è] più lavorare con array javascript”? JSON è solo l’array e oggetti letterale sintassi di Javascript. Se ti piace la sintassi JSON si dovrebbe sentire come a casa quando si utilizza array e oggetti in Javascipt.
  • Prendetevi del tempo per leggere questo articolo: non C’è nessuna tale cosa come un “Oggetto JSON”
InformationsquelleAutor mateusmaso | 2010-11-08



7 Replies
  1. 6

    Come creare un oggetto JSON javascript/jquery?

    Non c’è niente come un JSON oggetto. JSON sta per JavaScript Object Notation ed è fondamentalmente una stringa che codifica le informazioni simile al JavaScript object literal.

    Tuttavia, è possibile creare un tale codifica (il che comporterebbe una stringa) con JSON.stringify(object), vedere JSON JavaScript. Si potrebbe anche creare una stringa manualmente, ma è molto suscettibili di errore e mi consiglia di non farlo.

    Come faccio a clonare un oggetto JSON javascript/jquery?

    Come è proprio di una stringa:

    var jsonString2 = jsonString;

    Io non può più lavorare con javascript matrici

    JSON è un formato di di cambio dati, non è una struttura di dati che è possibile utilizzare in un’applicazione.


    Forse volete saperne di più su JSON, oggetti in JS e matrici in JS.

    • La seconda risposta NON è vero. L’operatore “=” non clonare qualsiasi oggetto, ma passare il riferimento.
    • Non ho mai affermato che lo fa. JSON in JS esiste solo come string. E dato che le stringhe sono immutabili, la clonazione di una stringa è così semplice come la si assegna a una variabile diversa. Se sono d’accordo che col senno di poi, OP abbiano parlato di oggetti JavaScript.
    • Quindi è una risposta a una domanda non valida. Ne consegue che non è una risposta. Penso che sarebbe meglio togliere quella riga non confondere drive-by-lettori e diffusione mis-saggezza.
    • -1 per le stesse ragioni per Sebastian. La gente sarà venuta qui in cerca di clonare un oggetto JavaScript e questa risposta è inadeguata, se non fuorviante.
    • Questa risposta non è valida. Fa NON clone di un array JSON. Quello che fa è quella di creare un riferimento a un array JSON e cambierà il “clone” e la matrice originale.
    • Penso che ti manca il contesto. Questo è di circa JSON (cioè testo), non gli oggetti JavaScript/matrici. Se si lavora con JavaScript array, quindi questa non è una risposta per voi. Si prega di notare che la domanda era cambiato / aggiornato: 6 anni, dopo che ho postato questa risposta.
    • Se è così, il titolo protagonisti di questa domanda e deve essere aggiornato per informare con precisione cosa è stato chiesto.
    • È un oggetto JSON (mi sono appena reso conto matrice che invece non sia una chiave/coppia oggetto? Ho appena testato il browser della console foo = {"x":"y"}; bar= foo; bar.x = "z"; console.log("Foo: "+foo.x+" | Bar: "+bar.x") e ha cambiato entrambi di z. Stiamo parlando di un oggetto String che contiene dati in formato JSON o un oggetto JSON?
    • Questa mi sembra la pedanteria ed è molto fuorviante. L’operatore = non clonare un “oggetto JavaScript”, per usare la @Reinhard terminologia. Ovviamente questo è ciò che il poster è stato chiesto in merito. Ora… devo andare al BANCOMAT.

  2. 39

    Questo è quello che faccio e funziona come un fascino

    if (typeof JSON.clone !== "function") {
        JSON.clone = function(obj) {
            return JSON.parse(JSON.stringify(obj));
        };
    }
    • È questo anche lavorando per < ES6 ?
    • Sì, lo fa
  3. 25

    Basta fare

    var x = {} //some json object here
    var y = JSON.parse(JSON.stringify(x)); //new json object here
    • Questo approccio sembra dar luogo ad alcuni problemi di conversione tra i tipi di dati, nel caso di nidificazione di oggetti JSON anche inclusi chiave associata ad un Array di oggetti. Nel mio caso, l’oggetto clonato ceduto chiave : {}, anziché la chiave di originale di : [] L’approccio nel post sotto guarda, newjsonobj = {…jsonobj}, sembra preferibile
  4. 16

    Di ES6. Oggetto.assegnare è un buon modo per fare questo.

    newjsonobj = Object.assign({}, jsonobj, {})

    Gli elementi in primo argomento mutare l’oggetto esistente, e il terzo argomento sono le modifiche in un nuovo oggetto restituito.

    In ES7 si propone la diffusione dell’operatore utilizzato.

    newjsonobj = {...jsonobj}
    • Questo crea una profonda clone: Eventuali modifiche ai valori del primo oggetto JSON influenzerà il clone (e viceversa), se tali valori sono qualcosa di mutevole come oggetti o array. ad esempio, var a = {arr:[1,2,3]}; var b = Object.assign({}, a, {}); b.arr[0] = 4; console.log(a.arr); stampa [4, 2, 3] invece di [1, 2, 3] come previsto.
  5. 6

    Q1: Come creare un oggetto JSON javascript/jquery?

    Creazione di un oggetto Javascript è così semplice:

    var user = {}; //creates an empty user object
    var user = {firstName:"John", lastName:"Doe"}; //creates a user by initializing 
    //its firstName and lastName properties.

    Dopo la creazione, è possibile aggiungere campi personalizzati al vostro oggetto come user.age = 30;.

    Se si dispone di un oggetto come una stringa JSON, è possibile convertirlo in un oggetto JSON utilizzando built-in JSON.parse(yourJsonString) funzione o jQuery $.parseJSON(yourJsonString) funzione.

    Q2: Come faccio a clonare un oggetto JSON javascript/jquery?

    Mio modo di clonare oggetti JSON è estendere funzione di jQuery. Ad esempio, è possibile generare un clone del vostro utente oggetto come di seguito:

    var cloneUser = $.extend(true, {}, {firstName:"John", lastName:"Doe"});

    Il primo parametro specifica se il clone oggetto sarà più o meno profondo, copia dell’originale (vedi Una copia dell’oggetto su wiki).

    Per vedere altre JSON clonazione alternative si possono leggere questo articolo.

    • JSON.parse restituisce un Object(Vedi: LETTURA), non un “oggetto JSON”, che, per quanto ne so non esiste. (Non per cercare il pelo nell’uovo, ma questo è un punto di confusione per molti principianti, in modo che potrebbe essere buono per correggerlo)
  6. 5

    Questo è un problema che ho spesso incontrato quando il parsing JSON e riutilizzare più volte il codice. E si vuole evitare di ri-analisi ogni volta da originale stringa JSON, o andare serialize/parse modo che è il modo meno efficiente.

    Quindi, in questi casi dove si vuole modificare l’oggetto analizzato, ma ancora di mantenere l’originale invariato, utilizzare la seguente funzione in entrambi i server (NodeJs) o client di codice javascript. JQuery clone funzione è meno efficiente, perché trattano i casi di funzioni, regexp, etc. La funzione riportata di seguito, considera solo il JSON tipi supportati (null, undefined, numero, stringa, array e oggetti):

    function cloneJSON(obj) {
        //basic type deep copy
        if (obj === null || obj === undefined || typeof obj !== 'object')  {
            return obj
        }
        //array deep copy
        if (obj instanceof Array) {
            var cloneA = [];
            for (var i = 0; i < obj.length; ++i) {
                cloneA[i] = cloneJSON(obj[i]);
            }              
            return cloneA;
        }                  
        //object deep copy
        var cloneO = {};   
        for (var i in obj) {
            cloneO[i] = cloneJSON(obj[i]);
        }                  
        return cloneO;
    }
  7. 0

    Supponiamo,
    Abbiamo un JSONOBJECT EmailData che hanno alcuni Dati. Ora, se si desidera che gli stessi dati in un altro oggetto (i.e clonare i dati), allora si può fare qualcosa di simile a questo:

    JSONOBJECT clone_EmailData=new JSONOBJECT(EmailData.toString());

    La dichiarazione di cui sopra vi darà un nuovo oggetto con gli stessi dati e il nuovo oggetto non è un riferimento al EmailData oggetto.

Lascia un commento