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

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

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

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

Q&A

解決済

1回答

515閲覧

JavaScript Jsonについて教えて下さい

arewq

総合スコア2

JavaScript

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

0グッド

0クリップ

投稿2021/03/22 21:03

Jsonについて教えて下さい
xに文字列二つ入ってて、それを配列化した場合に、idが同じもので1個目と2個目にアクセスするにはどうしたらいいのでしょうか
変数wに何個配列があるか?lengthを使っても取得できません

イメージ的には下記のようなことがしたいです

x='{"id":"1"}
{"id":"2"}';
w=JSON.parse(x);
for(i=0;i<w.length;i++){
alert(w.id[i]);// 1と2の表示がしたい
}

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

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

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

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

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

hoshi-takanori

2021/03/22 21:09

JSON.parse では一つのオブジェクトしかパースできません。 x='[{"id":"1"},{"id":"2"}]'; のように配列にする必要があります。
arewq

2021/03/22 21:15

回答ありがとうございます x='{"id":"1"} {"id":"2"}';という文字列から、 x='[{"id":"1"},{"id":"2"}]';のような形にする関数はご存知でしょうか?
hoshi-takanori

2021/03/22 21:19

実際にパースしてみないとオブジェクトの区切りが分からないので…。 一行に一つのオブジェクトとかなら、まず一行ごとに分けてそれぞれを JSON.parse するという方法もありますが。
arewq

2021/03/22 21:21

ご指摘いただいた、x='[{"id":"1"},{"id":"2"}]';という形で下記を実行してみましたが、 idの中身を取得できずにいます 何か間違いがありますでしょうか? <script> window.onload=function(){ x='[{"id":"1"},{"id":"2"}]'; w=JSON.parse(x); alert(w.id[0]);//1が出てくるはず alert(w.id[1]);//2が出てくるはず } </script>
hoshi-takanori

2021/03/22 21:27

w.id[0] の代わりに w[0].id とする必要があります。
arewq

2021/03/22 21:36

下記で目的の動作ができたのですが >まず一行ごとに分けてそれぞれを JSON.parse するという方法もありますが。 これは下記のやり方で合っていますか? <script> window.onload=function(){ x='{"id":"1"}{"id":"2"}'; xx=x.split("}"); for(j=0;j<xx.length;j++){ w=JSON.parse(xx[j]+"}"); alert(w["id"]); } } </script>
arewq

2021/03/22 22:02

色んなやり方があることがわかりました。 ありがとうございました
miyabi_takatsuk

2021/03/22 23:15

解決したなら、BA選出か、自己解決の投稿をし、質問を閉じて下さい。
guest

回答1

0

ベストアンサー

xが改行区切りのオブジェクトのリストだとすると、

js

1x = '[' + x.replaceAll('\n', ',') + ']'; 2w = JSON.parse(x); 3for(let i = 0; i < w.length; i++){ 4 alert(w[i].id); // 1と2の表示がしたい

配列の添字[i]を配列の変数であるwの直後につけます。

投稿2021/03/22 21:48

編集2021/03/22 23:19
int32_t

総合スコア21695

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

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

arewq

2021/03/22 21:52

回答ありがとうございます 動きませんでしたが下記でよろしかったでしょうか? <script> window.onload=function(){ x='{"id":"1"}{"id":"2"}'; w=JSON.parse(x); for(i=0;i<w.length;i++){ alert(w[i].id);// 1と2の表示がしたい } } </script>
int32_t

2021/03/22 23:15

x='[{"id":"1"}, {"id":"2"}]'; でなら動くはずです。[] と , がないとJSONとしては不正で、開発者ツールのコンソールにエラーが出ているはずです。
int32_t

2021/03/22 23:20

x='{"id":"1"} {"id":"2"}'; でも動くように回答を修正しました。
arewq

2021/03/22 23:50 編集

ありがとうございます >[] と , がないとJSONとしては不正 []がないとダメというのがなぜかわかりません 変数に直接x='{"id":"1"}{"id":"2"}';と書いてますが、 a.jsonというファイルにデータ{"id":"1"}{"id":"2"}と記載してあった場合、 a.jsonのファイルを読み込むと、 {"id":"1"}{"id":"2"}が返ってきて、 [{"id":"1"}{"id":"2"}]という形で返ってきませんよね? その場合、,と[]は自力で形成するんですか? ["+get_a_json+"]みたいに形成してるんでしょうか?
arewq

2021/03/22 23:49

ちなみに無事にint32_tさんのソースでは動きました。 腑に落ちないため、[]について聞いています
arewq

2021/03/22 23:51

a.jsonのファイルを読み込むと、 [{"id":"1"},{"id":"2"}]で返ってくれば、わかりやすいのですが {"id":"1"}{"id":"2"}という形で返ってきます
int32_t

2021/03/22 23:54

> a.jsonというファイルにデータ{"id":"1"}{"id":"2"}と記載してあった場合、 それはJSONとしては間違っているということになります。そのファイルをJSONと呼んではいけません。 JSONではないデータを正しくJSON形式にするために、[] で囲ったりと加工するわけです。
arewq

2021/03/23 00:09 編集

とんだ勘違いをしてしまいました a.json 中身 {"id":"a","id2":"b"} があった場合に それをファイル読込すると {"id":"a","id2":"b"}という文字列が返ってきますよね それをJSON形式にエンコードするのですが なぜか <script> window.onload=function(){ a='{"id":"a","id2":"b"}'; w = JSON.parse(a); alert(w["id"]); } </script> で正常に動きます []がないのになぜ上記で動くんですか? a='[{"id":"a","id2":"b"}]'; じゃないんですか?
arewq

2021/03/23 00:13

もしファイルが二つ分けられてて二つを読み込んで処理する場合のみですか? a.json 中身 {"id":"a","id2":"b"} b.json 中身 {"id":"c","id2":"d"} a='{"id":"a","id2":"b"}{"id":"c","id2":"d"}';//a.jsonとb.jsonの中身が入るとします このままだと無理だから a='[{"id":"a","id2":"b"},{"id":"c","id2":"d"}]'; 二つ以上の場合こうしろ、ということですか 1つの場合は、 <script> window.onload=function(){ a='{"id":"a","id2":"b"}'; w = JSON.parse(a); alert(w["id"]); } </script> で動いて当たり前ということですか?
int32_t

2021/03/23 00:15

> {"id":"a","id2":"b"} これはJSONとして正しい形式です。 1つのJSONは、1つの値でなければなりません。{...} は1つのオブジェクトでOK、[...] は1つの配列でOK、{...} {...} は1つではないのでダメです。
arewq

2021/03/23 00:17

二つある場合、自前で処理をして[]をつける処理と,で分ける処理を書かなくてはならないんですか?
int32_t

2021/03/23 00:17

a.json と b.json のそれぞれが正しい JSON 形式になっていたら、それらを繋げると JSON ではなくなります。繋げないで個別に JSON.parse() するのが普通だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問