質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

7回答

4088閲覧

【JavaScript】JSONデータの中身を1つだけ出力する方法

phiilo_

総合スコア85

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/27 01:00

編集2017/06/27 01:06

JSONの一部を出力したいです。

var obj = { a : true, b : false, c : 0, d : 1, e : 2, f : 0.345, g : "あ", h : "い" }; var hoge = JSON.stringify(obj); alert(hoge[0]);

上記の場合
・変数「 obj 」に含まれる一番最初の「 { 」が出力されてしまう。
・記号「 ○ 」などは\u2525的な感じで変換されてしまう。
**
質問内容
例えば「 a 」の「 true 」だけを出力する場合、また記号が変換されないようにするためには、どのように出力したら良いでしょうか??**

下記URLにごアクセスいただき、コメントアウト外しで左上「RUN」をクリックすると実行できます。

JSFiddle
https://jsfiddle.net/fwjLfodh/5/

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

・記号「 ○ 」などは\u2525的な感じで変換されてしまう。

\u2525 は文字化けではなく、Unicodeエスケープシーケンスです。
文字列リテラルに変換されれば、正しく「〇」が出力されるはずです(最も、Google Chrome 59.0.3071.115 ではエスケープ処理は発生しませんでしたが)。
初めにJSON文字列しかなくてオブジェクトが存在しない状況と仮定するなら、JSON.parse を使えば解決できると思います。

JavaScript

1var obj = { 2 a : true, 3 b : false, 4 c : 0, 5 d : 1, 6 e : 2, 7 f : 0.345, 8 g : "あ", 9 h : "い", 10 i : '〇' 11}; 12 13var json = JSON.stringify(obj); 14console.log(json); // {"a":true,"b":false,"c":0,"d":1,"e":2,"f":0.345,"g":"あ","h":"い","i":"〇"} 15console.log(JSON.parse(json)); // {"a":true,"b":false,"c":0,"d":1,"e":2,"f":0.345,"g":"あ","h":"い","i":"〇"} 16 17obj = JSON.parse(json); 18console.log(obj); // {"a":true,"b":false,"c":0,"d":1,"e":2,"f":0.345,"g":"あ","h":"い","i":"〇"} 19console.log(obj.a); // true

Re: phiilo_ さん

投稿2017/06/27 01:14

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phiilo_

2017/06/27 01:45

文字化けではないですね。文字エンコード指定など色々試したんですが、うまく動作しませんでしたが、一つ前にご回答いただいた方で解決しました。 丁寧なご回答ありがとうございました!
guest

0

ベストアンサー

JSON.stringifyは配列をJSON文字列化するコードなのでご提示のやり方だと文字列の最初(0番目)の「{」が出力されますし、全角文字列である「○」も変換されます。
配列として取り出したいのであればJSON文字列を配列に戻すJSON.parse()を利用します。

javascript

1var obj = { 2 a : true, 3 b : false, 4 c : 0, 5 d : 1, 6 e : 2, 7 f : 0.345, 8 g : "あ", 9 h : "い" 10}; 11 12var hoge = JSON.stringify(obj); 13var pHoge = JSON.parse(hoge); 14alert(pHoge["a"]); //true

投稿2017/06/27 01:10

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/27 01:11

あ、そもそもJSON化しなくていいという話・・・
phiilo_

2017/06/27 01:43

ありがとうございます。 JSONの取り扱いも色々あるようで勉強になりました! このコードを利用して解決できましたのでベストアンサー とさせていただきました!
m.ts10806

2017/06/27 02:37

JSONを利用する意図とか経緯とか書かれたほうがいいかなと思います。 今回の提示のコードだけだと、JSON関係なく配列から指定値を取り出すだけでいいじゃん?って思う人もいるし、実際にそのような回答もありますし。
guest

0

aを取得するだけならば、
以下で出来ました。

javaScript

1var obj = { 2 a : true, 3 b : false, 4 c : 0, 5 d : 1, 6 e : 2, 7 f : 0.345, 8 g : "あ", 9 h : "い" 10}; 11 12alert(obj.a); //true が表示 13alert(obj.g); //あ が表示 14

投稿2017/06/27 01:10

airia

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phiilo_

2017/06/27 01:40

ありがとうございます。 参考にさせていただきます。とてもシンプルで良いですね!
guest

0

JSON.stringify(obj)としていることで、hogeは文字列になってしまっています。

alert(hoge) =>(文字列) {"a":true,"b":false,"c":0,"d":1,"e":2,"f":0.345,"g":"あ","h":"い"}

この文字列の一番先頭は"{"のため、hoge[0]は"{"と、なってしまいます。

実はこの場合stringifyを使う必要がなく、またhogeに代入する必要もなく、obj.a,obj.bと使用することで、お望みの挙動を実現できるはずです

投稿2017/06/27 01:10

sakapun

総合スコア888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phiilo_

2017/06/27 01:41

ご回答ありがとうございました。参考にさせていただきます。
guest

0

JSON.stringifyで文字列化しているので、結果としては妥当と思われます。
上記の場合、JSON.stringifyの処理は不要です。
また、objのaを取得したい場合、素直にobj.aで値を取得出来ます。

投稿2017/06/27 01:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phiilo_

2017/06/27 01:39

迅速なご回答ありがとうございました。参考にさせていただきます。
guest

0

下記で解決しました!ご回答いただいた方々に感謝します。

var obj = {
a : true,
b : false,
c : 0,
d : 1,
e : 2,
f : 0.345,
g : "あ",
h : "い"
};

var hoge = JSON.stringify(obj);
var pHoge = JSON.parse(hoge);
alert(pHoge["a"]); //true

投稿2017/06/27 01:46

phiilo_

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

objectからn番目の値を取る場合valuesで参照してください

javascript

1var obj = { 2 a : true, 3 b : false, 4 c : 0, 5 d : 1, 6 e : 2, 7 f : 0.345, 8 g : "あ", 9 h : "い" 10}; 11console.log(Object.values(obj)[0]); 12

投稿2017/06/27 01:30

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2017/06/27 02:28

> console.log(Object.values(obj)[0]); Object.values は for-in と同じ順番で列挙される仕様ですが、順序は実装依存だったように思います。 あるいは、最近の仕様では変わったのでしょうか。
yambejp

2017/06/27 02:42 編集

どうなんでしょう? もとの命題がhoge[0]を参照することが求めているので より命題に沿った形の回答を模索しただけなんですけど。 (最終的にaの要素を直接見にいっているので余計なお世話だったようですが) 逆に質問者さんのいう0番目の要素が必ずしもaの要素とあっていないだけの話で 参照の仕方としては間違っていないのでは? 興味本位で申し訳ないですがthink49さんの思う0番目の要素の取り出し方はどうなりますか?
think49

2017/06/27 03:04 編集

> 逆に質問者さんのいう0番目の要素が必ずしもaの要素とあっていないだけの話で参照の仕方としては間違っていないのでは? なるほど、hoge[0] で「0番目の要素」と解釈されたのですね。 私は本文中で "「 a 」の「 true 」だけを出力する場合" としかなかった為、「obj.a を取り出すで良い」と解釈していましたが、そういう考え方もありますね。 > 興味本位で申し訳ないですがthink49さんの思う0番目の要素の取り出し方はどうなりますか? 私の考える「0番目の要素の取り出し方」は「オブジェクトに『0番目の要素』の概念がない為、不可能」です。 元々、オブジェクトのキーには順序の概念はなく、「順序が重要ならオブジェクト初期化子を使う事が間違い」と考えています。 n番目の値を取りだす事を目的とするなら、オブジェクト初期化子では不可能なので、二次元配列もしくは new Map をお勧めします。 var map = new Map([["a",true],["b",false],["c",0],["d",1],["e",2],["f",0.345],["g","あ"],["h","い"],["i","〇"]]); [...map.values()][0]; true new Map には forEach もありますし、オブジェクト初期化子の上位互換だと思います。
yambejp

2017/06/27 03:05

> 『0番目の要素』の概念がない為、不可能 たしかにおっしゃる通りですね それなら納得です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問