Codificación de un objeto Javascript en una cadena Json

102

Quiero codificar un objeto Javascript en una cadena JSON y tengo considerables dificultades.

El objeto se parece a esto

new_tweets[k]['tweet_id'] = 98745521;
new_tweets[k]['user_id'] = 54875;       
new_tweets[k]['data']['in_reply_to_screen_name'] = "other_user";
new_tweets[k]['data']['text'] = "tweet text";

Quiero poner esto en una cadena JSON para ponerlo en una solicitud ajax.

{'k':{'tweet_id':98745521,'user_id':54875, 'data':{...}}}

te dan la imagen. No importa lo que haga, simplemente no funciona. Todos los codificadores JSON como json2 y similares producen

[]

Bueno, eso no me ayuda. Básicamente, me gustaría tener algo como la encodejsonfunción php .

Lukas Oppermann
fuente
3
¿Qué probaste realmente? proporcione algún código de sus pruebas ...
Andreas Niedermair

Respuestas:

163

A menos que la variable kesté definida, eso es probablemente lo que está causando su problema. Algo como esto hará lo que quieras:

var new_tweets = { };

new_tweets.k = { };

new_tweets.k.tweet_id = 98745521;
new_tweets.k.user_id = 54875;

new_tweets.k.data = { };

new_tweets.k.data.in_reply_to_screen_name = 'other_user';
new_tweets.k.data.text = 'tweet text';

// Will create the JSON string you're looking for.
var json = JSON.stringify(new_tweets);

También puedes hacerlo todo a la vez:

var new_tweets = {
  k: {
    tweet_id: 98745521,
    user_id: 54875,
    data: {
      in_reply_to_screen_name: 'other_user',
      text: 'tweet_text'
    }
  }
}
Dave Ward
fuente
3
Eres un genio. Muchas gracias. Se definió la k. El problema era que yo era estúpido usando new Array () en lugar de un objeto {}.
Lukas Oppermann
Funciona perfecto ... hago una prueba y el resultado es impresionante. Gracias. console.info(json); console.log(new_tweets["k"]); console.log(new_tweets["k"]["user_id"]); console.log(new_tweets["k"]["data"]["text"]);
Equiman
Después de todo este tiempo leyendo sobre CORS y la seguridad de Chrome, esta es una forma simple y efectiva de codificar datos JSON. Un +1 muy merecido
cenizas999
1
@ TomášZato: ¿Por qué lo sería específicamente? JSON.stringifyes anterior a PHP json_encode, si eso es a lo que te refieres.
Dave Ward
Sí, eso era lo que estaba pensando. Me enteré JSONmuy recientemente. En el pasado, solía evalanalizar las respuestas JSON. Me alegré de que la evaluación desaparezca de mi código.
Tomáš Zato - Reincorpora a Monica