2009-04-10 76 views

Respuesta

485

JSON significa notación de objetos JavaScript. Un objeto JSON es realmente una cadena que aún no se ha convertido en el objeto que representa.

Para agregar una propiedad a un objeto existente en JS, podría hacer lo siguiente.

object["property"] = value; 

o

object.property = value; 

Si usted proporciona alguna información extra, como exactamente lo que tiene que hacer en su contexto es posible obtener una respuesta más personalizada.

+0

es esto posible entonces: objeto ["propiedad"] ["subProperty"] ... eso sería increíble. Acabo de intentarlo. var a.s = "qué"; como.d = "nope"; No está definido :( – shanehoban

+6

@shanehoban aquí 'a' es JSON,' as' como acaba de definir es una cadena. Ahora intenta agregar '[" subproperty "]' a una cadena. ¿Entiende ahora por qué? ¿Recibió el error? – shivam

+0

@shivam Sí, muchas gracias! – shanehoban

120

Un objeto JSON es simplemente un objeto javascript, por lo que con Javascript es un lenguaje basado en prototipos, todo lo que tiene que hacer es abordarlo usando la notación de puntos.

mything.NewField = 'foo'; 
+0

Eso es todo, ¡me encanta el protoype de JavaScript! – caglaror

+1

esto debe aceptarse respuesta – CyprUS

42

Hola, gracias por esta publicación. Quiero agregar algo que pueda ser útil.

Para IE, es bueno usar la sintaxis object["property"] = value; porque algunas palabras especiales en IE pueden darle un error. Un ejemplo: object.class = 'value'; esto falla en IE, porque "clase" es una palabra especial. Pasé varias horas con esto ................!

132
var jsonObj = { 
    members: 
      { 
      host: "hostName", 
      viewers: 
      { 
       user1: "value1", 
       user2: "value2", 
       user3: "value3" 
      } 
     } 
} 

var i; 

for(i=4; i<=8; i++){ 
    var newUser = "user" + i; 
    var newValue = "value" + i; 
    jsonObj.members.viewers[newUser] = newValue ; 

} 

console.log(jsonObj); 
+10

+1 para Ejemplo dado. – sunleo

+3

Justo lo que estaba buscando, agregando un elemento cuando el nombre debe construirse mediante programación – quilkin

-11
for(var i=0;i<JsonObject.length;i++){ 
        alert("inside forloop"); 
        var dataArray = JsonObject[i]; 
        alert(dataArray["data"]); 

      } 
5
extend: function(){ 
    if(arguments.length === 0){ return; } 
    var x = arguments.length === 1 ? this : arguments[0]; 
    var y; 

    for(var i = 1, len = arguments.length; i < len; i++) { 
     y = arguments[i]; 
     for(var key in y){ 
      if(!(y[key] instanceof Function)){ 
       x[key] = y[key]; 
      } 
     }   
    }; 

    return x; 
} 

Extiende múltiples objetos JSON (ignora funciones):

extend({obj: 'hej'}, {obj2: 'helo'}, {obj3: {objinside: 'yes'}}); 

resultará en un único objeto JSON

2

También puede agregar nuevos objetos JSON en su JSON , usando la función extend,

var newJson = $.extend({}, {my:"json"}, {other:"json"}); 
// result -> {my: "json", other: "json"} 

Una muy buena opción para la función extender es la combinación recursiva. Simplemente agregue el valor verdadero como el primer parámetro (lea la documentación para más opciones). Ejemplo,

var newJson = $.extend(true, {}, { 
    my:"json", 
    nestedJson: {a1:1, a2:2} 
}, { 
    other:"json", 
    nestedJson: {b1:1, b2:2} 
}); 
// result -> {my: "json", other: "json", nestedJson: {a1:1, a2:2, b1:1, b2:2}} 
-1

Usos $ .extend() de jQuery, así:

token = {_token:window.Laravel.csrfToken}; 
data = {v1:'asdass',v2:'sdfsdf'} 
dat = $.extend(token,data); 

espero que les sirva.

8

También puede usar Object.assign de ECMAScript 2015. También le permite agregar atributos anidados a la vez. Por ejemplo:

const myObject = {}; 

Object.assign(myObject, { 
    firstNewAttribute: { 
     nestedAttribute: 'woohoo!' 
    } 
}); 

Ps: Esto no anulará el objeto existente con los atributos asignados. En cambio, serán agregados. Sin embargo, si asigna un valor a un atributo existente, se invalidará.

Cuestiones relacionadas