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

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

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

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

Q&A

解決済

1回答

1574閲覧

変数の生の文字列を文字列としてではなく、ありのまま代入する方法

pegy

総合スコア243

JavaScript

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

0グッド

0クリップ

投稿2020/08/05 10:47

質問の題名がうまく表現できず申し訳ないのですが、下記のようなコードでconsole.log(bodyquery)を出力すると文字列として以下のような結果が得られます。

{'id':15,'record': {'stock': {'value':9}}},{'id':11,'record': {'stock': {'value':4}}}

これを'records':[bodyquery]//hereのところに代入するとPUT https://prologis.cybozu.com/k/v1/records.json 400 (Bad Request)とエラーが出力されてしまいます。

※申し訳ないのですが、KintoneというアプリケーションをカスタムするためにJavascriptAPIを利用しているため、通常では判断できないエラーなので、ここでは詳細な説明を割愛させてください。

一方で
'records':[
{'id':15,'record': {'stock': {'value':9}}},{'id':11,'record': {'stock': {'value':4}}}
]
のように同じコードをいれると正しく動作します。
bodyqueryの変数の中に文字列で格納してしまっていることが問題のように考えたのですが、仮にそうである場合に、これを文字列としてではなく、ありのまま代入する方法はあるのでしょうか?

宜しくお願い申し上げます。

Javascript

1 var bodyquery =""; 2 for (var i=0; i<result[0]['records'].length; i++){ 3 for(var j = 0; j < aryresult.length; j++){ 4 console.log() 5 if(result[0]['records'][i]['productName']['value']==aryresult[j]['pro']){ 6 if(result[0]['records'][i]['stock']['value']==""){ 7 var count = result[0]['records'][i]['arrival']['value'] - aryresult[j]['amt'] 8 bodyquery += "{'id':"+result[0]['records'][i]['レコード番号']['value']+",'record': {'stock': {'value':"+count+"}}}," 9 }else{ 10 var count = result[0]['records'][i]['stock']['value'] - aryresult[j]['amt'] 11 bodyquery += "{'id':"+result[0]['records'][i]['レコード番号']['value']+",'record': {'stock': {'value':"+count+"}}}," 12 } 13 } 14 } 15 } 16      bodyquery = bodyquery.slice(0,-1) 17 console.log(bodyquery) 18 var body = { 19 'app':389, 20 'records':[bodyquery]//here 21 } 22 kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body, function(resp) { 23 console.log(body) 24 }, function(error) { 25 console.log(error); 26 console.log(body) 27 }); 28

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1var records = JSON.parse('[{"id":15,"record": {"stock": {"value":9}}},{"id":11,"record": {"stock": {"value":4}}}]')

の様にすれば配列を得ることは出来ます。
JSONのキー部分はダブルクォートである必要がありますので、その部分は書き換える必要はあります。

投稿2020/08/05 10:57

Eggpan

総合スコア2743

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

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

pegy

2020/08/05 11:07

ありがとうございます。今並行して、自分もevalとJSON.parseにたどり着いたのですが、昔に倣った通り、基本的にはevalは避けるべきとJSON.parseで書き換えました。以下の通りです。 if(result[0]['records'][i]['stock']['value']==""){ var count = result[0]['records'][i]['arrival']['value'] - aryresult[j]['amt'] bodyquery += '{"id":'+result[0]['records'][i]['レコード番号'] ['value']+',"record": {"stock": {"value":'+count+'}}},'//ダブルコロンとセミコロンの書き換え }else{ var count = result[0]['records'][i]['stock']['value'] - aryresult[j]['amt'] bodyquery += '{"id":'+result[0]['records'][i]['レコード番号']['value']+',"record": {"stock": {"value":'+count+'}}},'//ダブルコロンとセミコロンの書き換え } そのうえで bodyquery = JSON.parse(bodyquery.slice(0,-1)) として var body = { 'app':389, 'records':[bodyquery] } としたのですが、以下のようなSyntaxErrorが発生してしまいます。 Uncaught SyntaxError: Unexpected token , in JSON at position 42
pegy

2020/08/05 11:08

[]の括弧を含めてParseしなくてはいけないということが問題なのでしょうか?
pegy

2020/08/05 11:12

申し訳ございません、[]を含めて 'records':bodyquery で解決致しました。 JSON.parseがJSONを使ってどのように解析して返還するのかという過程が理解できていおらず、この点は自主学習に励みたいと思います。 ありがとうございます!
Eggpan

2020/08/05 11:18

解決されたようでよかったです。 配列の文字列になりますので、[]も含めた内容でparseする必要があります。 JSON.stringify(変数) と JSON.parse(文字列) で相互に変換できますので、このあたり試してもらうと良いかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問