Kodowanie obiektu Javascript do łańcucha Json

102

Chcę zakodować obiekt Javascript w ciąg JSON i mam znaczne trudności.

Obiekt wygląda mniej więcej tak

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";

Chcę umieścić to w ciągu JSON, aby umieścić go w żądaniu ajax.

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

Dostajesz obraz. Bez względu na to, co robię, to po prostu nie działa. Wszystkie kodery JSON, takie jak json2 i takie produkty

[]

Cóż, to mi nie pomaga. Zasadniczo chciałbym mieć coś takiego jak encodejsonfunkcja php .

Lukas Oppermann
źródło
3
czego właściwie próbowałeś? proszę podać kod swoich prób ...
Andreas Niedermair

Odpowiedzi:

163

O ile zmienna nie kjest zdefiniowana, prawdopodobnie jest to przyczyną problemów. Coś takiego zrobi, co chcesz:

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);

Możesz też zrobić to wszystko naraz:

var new_tweets = {
  k: {
    tweet_id: 98745521,
    user_id: 54875,
    data: {
      in_reply_to_screen_name: 'other_user',
      text: 'tweet_text'
    }
  }
}
Dave Ward
źródło
3
Jesteś geniuszem. Dziękuję Ci bardzo. Zdefiniowano k. Problem polegał na tym, że byłem głupi, używając nowej Array () zamiast obiektu {}.
Lukas Oppermann
Działa idealnie ... Robię test i wynik jest super. Dzięki. console.info(json); console.log(new_tweets["k"]); console.log(new_tweets["k"]["user_id"]); console.log(new_tweets["k"]["data"]["text"]);
equiman
Po całym tym czasie czytania o CORS i bezpieczeństwie Chrome, jest to prosty i skuteczny sposób na kodowanie danych JSON. Bardzo zasłużony +1
popiół 999
1
@ TomášZato: Dlaczego konkretnie miałoby to być? JSON.stringifyjest starsza niż PHP json_encode, jeśli o tym wspominasz.
Dave Ward
Tak, właśnie o tym myślałem. Dowiedziałem się o tym JSONbardzo niedawno. W przeszłości evalparsowałem odpowiedzi JSON. Byłem szczęśliwy, że eval zniknie z mojego kodu.
Tomáš Zato - Przywróć Monikę
14

Możesz użyć JSON.stringifytakich jak:

JSON.stringify(new_tweets);
Luca C.
źródło