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

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

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

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

Q&A

解決済

1回答

681閲覧

JSONのオブジェクトの要素を追加する方法

YOshim

総合スコア1085

JSON

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

0グッド

0クリップ

投稿2021/09/22 05:41

編集2021/09/22 06:51

現在、メッセージのやり取りをJSONで保存しようと考えております。保存するものは送信者のID,送信時刻、メッセージです。
データ数を減らすため以下のようなデータ構造で開発を進めております。

var senderID1 = "1A2B3C4D5E"; var senderID2 = "5A6B7C8D9E"; var obj = { [senderID1]:[ //IDは変数 [ "2021/09/22_12:34:56", //Time "Hello World" //Message ], [ "2021/09/22_12:34:56", //Time "Hello World2" //Message ], . . . ], [senderID2]:[ //IDは変数 [ "2021/09/22_12:34:56", //Time "Hello World" //Message ], [ "2021/09/22_12:34:56", //Time "Hello World2" //Message ], . . . ] }

SenderIDに対応するTimeとMessageを追加していきたいのですが、JSONの要素の追加がうまく行えません。
上記のobjに下記のデータを追加する場合にどうすればよいでしょうか。

var senderID1 = "1A2B3C4D5E"; var addData = { [senderID1]:[ "2021/09/22_12:34:56", "Hello World" ] }

より簡易・具体的には以下のbaseValueの要素にdataValueを追加したいです。

var baseValue = { "Sender1":[ [ "12:34:56", "I stayed here." ] ] "Sender2":[ [ "12:34:56", "I stayed here." ] ] }; var dataValue = { "Sender1":[ "21:22:23", "I added now" ] };

以下となることを期待しています。

{ "Sender1":[ [ "12:34:56", "I stayed here." ], [ "21:22:23", "I added now" ] ] "Sender2":[ [ "12:34:56", "I stayed here." ] ] }

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

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

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

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

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

yambejp

2021/09/22 05:52

> [senderID1]: とはなんでしょう?123みたいな値を想定していますか? 例示のままでは構造がおかしくてなにもできません
YOshim

2021/09/22 05:55

senderID1は"1A2B3C4D5E"などの10桁ほどの英数字の文字列となっています。 senderID1が変数なので括弧でくくっています。 修正します。
yambejp

2021/09/22 06:26

> senderID1が変数なので括弧でくくっています そうなると配列として定義されていますよね? 配列はオブジェクトのキーになれませんのでJSONは作れません
YOshim

2021/09/22 06:31

ES2015(ES6)以降は定義時に変数を括弧で囲むことでオブジェクトのキーとして展開されるようになりました。従って上記の記述となっております。
yambejp

2021/09/22 06:37 編集

あ、失礼ました。問題はそっちじゃなかったです [senderID1]:{ これがオブジェクトを作っていますが、キーのないオブジェクトを 記載しようとしています。 キーを設定するか配列にする必要があるでしょう
hoshi-takanori

2021/09/22 06:38

[senderID1]:{ の { (オブジェクト) は [ (配列) の間違いでは。 そして、追加は addData[senderID1].push({ "Time" : "2021/09/22_12:34:56", "Message": "Hello World" }); とか?
surface_0

2021/09/22 06:39

> var obj = { > [senderID1]:{ //IDは変数 > [ > "2021/09/22_12:34:56", //Time > "Hello World" //Message > ], 多分デストラクチャリングからの書き換えによるものかなと思いますが、この説明ではオブジェクトの中身にキーの無い値が置かれているので、追加云々の前にエラーとなるのではないでしょうか? 記述ミスでしたら修正願います。
YOshim

2021/09/22 06:40

なるほど、失礼しました。 改めて修正しました。
YOshim

2021/09/22 06:42

質問内容のコードに不備があり色々ご迷惑おかけしてすみません。修正致しました。
guest

回答1

0

ベストアンサー

配列を連結したいのであればこれでどうでしょうか?

js

1for (sender in addData) { 2 obj[sender] = obj[sender].concat(addData[sender]); 3}

投稿2021/09/22 06:49

編集2021/09/22 07:00
surface_0

総合スコア497

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

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

YOshim

2021/09/22 07:00

ありがとうございました。 元々は下記のような記述でupdatedValueの値を確認していました。 var updatedValue = baseValue["Sender"].push(dataValue["Sender"]); JSONでなく数字が返ってきており謎だったのですが、baseValueにpushしているのでbaseValueの値を確認すればよかったと気づきました。 こちらの回答を受けてpushによる記述に問題ないことを確認できたことで原因を把握できました。ありがとうございます。
surface_0

2021/09/22 07:05

何度も書き直しまくってすいません(-_-;) pushはconcatと違い、配列の内容が直接変更されるので代入しなおしは必要ないですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問