現在、メッセージのやり取りを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." ] ] }
> [senderID1]:
とはなんでしょう?123みたいな値を想定していますか?
例示のままでは構造がおかしくてなにもできません
senderID1は"1A2B3C4D5E"などの10桁ほどの英数字の文字列となっています。
senderID1が変数なので括弧でくくっています。
修正します。
> senderID1が変数なので括弧でくくっています
そうなると配列として定義されていますよね?
配列はオブジェクトのキーになれませんのでJSONは作れません
ES2015(ES6)以降は定義時に変数を括弧で囲むことでオブジェクトのキーとして展開されるようになりました。従って上記の記述となっております。
あ、失礼ました。問題はそっちじゃなかったです
[senderID1]:{
これがオブジェクトを作っていますが、キーのないオブジェクトを
記載しようとしています。
キーを設定するか配列にする必要があるでしょう
[senderID1]:{ の { (オブジェクト) は [ (配列) の間違いでは。
そして、追加は addData[senderID1].push({ "Time" : "2021/09/22_12:34:56", "Message": "Hello World" }); とか?
> var obj = {
> [senderID1]:{ //IDは変数
> [
> "2021/09/22_12:34:56", //Time
> "Hello World" //Message
> ],
多分デストラクチャリングからの書き換えによるものかなと思いますが、この説明ではオブジェクトの中身にキーの無い値が置かれているので、追加云々の前にエラーとなるのではないでしょうか?
記述ミスでしたら修正願います。
なるほど、失礼しました。
改めて修正しました。
質問内容のコードに不備があり色々ご迷惑おかけしてすみません。修正致しました。
回答1件
あなたの回答
tips
プレビュー