ダブルクオーテーションのエスケープ処理が原因によるエラー解決方法


パワークエリで、kintoneのAPIを利用する処理を作成しました。  
基本的な処理はうまくいったのですが、APIにPOSTするデータにダブルクオーテーションが  
入っているとエラーが発生します。

ダブルクオーテーションの利用自体は問題ないAPIなので、  
おそらくエスケープ処理がうまくいっていないのではと考えています。

■実際の処理部分

[code]

    requestBody = "{""app"": " & app_id &  ",""size"": 500,""query"": """ & query & """ " & fields & "}",  
    
[/code]

上記にある **query** の部分に、APIに対するクエリを格納しています。  
例えば

[code]

    日付  >= LAST_MONTH() 
    
[/code]

といったダブルクオーテーションを使わない内容は問題なく動作します。  
一方で

[code]

    作成年月日 >= "2023-05-01"
    
[/code]

とダブルクオーテーションを利用すると  
不正なjson文字列です、とエラーが発生します。

[code]

    作成年月日 >= ""2023-05-01""
    作成年月日 >= \\"2023-05-01\\"
    作成年月日 >= \\""2023-05-01\\""
    
[/code]

など思いつくものを試していますが、動作しませんでした。

もし原因がわかるかたいましたらよろしくお願いします。




`query = "作成年月日 >= \""2023-05-01\""",`のように、`\""`と書き換えることで解決しないでしょうか？  
※Kintoneは使っていないので一般的なJSONをPOSTする観点での回答です。

検証のため、下記のサンプルコードを実行してローカルサーバにPOSTされたBodyを確認してみました。

**サンプルコード**

[code]

    let
        //query = "日付  >= LAST_MONTH()",           // 1.OK
        //query = "作成年月日 >= \\"2023-05-01\\"",   // 2.NG
        //query = "作成年月日 >= ""2023-05-01""",     // 3.構文NG
        //query = "作成年月日 >= \\""2023-05-01\\""", // 4.構文NG
        query = "作成年月日 >= \""2023-05-01\""",     // 5.OK
        body = "{""query"":""" & query & """}",
        //以下、動作用のどうでもいいコード
        ソース = Csv.Document(Web.Contents("http://127.0.0.1:8080/", [Content=Text.ToBinary(body)]),[Delimiter=",", Columns=1, Encoding=932, QuoteStyle=QuoteStyle.None]),
        変更された型 = Table.TransformColumnTypes(ソース,{{"Column1", type text}})
    in
        変更された型
    
[/code]

`query`変数をコメント1から5まで書き換えてそれぞれ実行した結果、Bodyとしてサーバに渡された値などは下記のようになりました。

  1. `{"query":"日付 >= LAST_MONTH()"}`
  2. コンパイルエラー「Expression.SyntaxError: トークン ',' が必要です。」
  3. `{"query":"作成年月日 >= "2023-05-01""}`
  4. `{"query":"作成年月日 >= \\"2023-05-01\\""}`
  5. `{"query":"作成年月日 >= \"2023-05-01\""}`

2.は内部のダブルクォーテーションがエスケープできていないのでコード上でシンタックスエラーが発生します。  
3.と4.はBodyとして渡されたJSON内部のダブルクォーテーションがエスケープできていませんので、無効なJSONになります。  
1.と5.ならば、Bodyとして渡されたJSONは有効な構文です。

