2017-01-14 10 views
1

私は現在Pythonでラムダを開発していますが、実際にはPythonでjsonsを構築するのに少し苦労しています。printとreturnの結果が異なる

ラムダはdynamodb-tableから読み取り、すべての戻り値をjson構造体に追加します。

これはjsonを印刷するための魅力のように機能しますが、コールバックとして返すことはできません。

のSampleCode:

import json 

def lambda_handler(event, context): 
    jsondata = '{' \ 
     '"cols": [' \ 
      '{"id":"","label":"Timestamp","pattern":"","type":"string"},' \ 
      '{"id":"","label":"Temperature","pattern":"","type":"number"},' \ 
      '{"id":"","label":"Humidity","pattern":"","type":"number"}' \ 
      '],' \ 
     '"rows": [' 
    jsondata += ']' \ 
     '}' 
    print jsondata 
    return jsondata 

if __name__ == "__main__": 
    lambda_handler(None, None) 

この「文字列の追加は、」スムーズな方法ではありませんが、それは予想通りの印刷が見えながら

のために働いていただけだったように私には思える:

log output

戻り値は、私のために、戻り値は使用できなくなっているバックスラッシュが含まれています。

enter image description here

アプリケーションが唯一のシェルに印刷されているので、それは正しく値が表示されます。

shell output

任意のアイデア?

乾杯と感謝事前に、 マティアス

+1

戻り値は、バックスラッシュが含まれていないものは何でも環境あなたは、ディスプレイをそれを使用しているので、それだけでそれらを表示します。それはjsonモジュールからdumps機能とJSONを構築する方が簡単だ、と述べた

二重引用符で囲まれた文字列リテラルは、文字列の中で二重引用符をエスケープする必要があります。差異についてなぜ、あなたがインポートしている 'json'パッケージを使わないのですか? – schwobaseggl

答えて

3

文字列は、バックスラッシュが含まれていません。そのの表現は、文字列(""で区切られています)がその起きたときに終了しないことを示す必要があるため、"です。同じ引用符で区切られた文字列リテラルの中に引用符を書く必要があった場合は、それもバックスラッシュでエスケープする必要があります。

import json 

jsondata = json.dumps({ 
    "cols": [{"et": "cetera"}], 
}) 
+0

あなたのおかげです - それは本当にGoogleのチャートに転送するために働いた。しかし、奇妙な行動の一種.... @RemcoGerlich私はその可能性を見てきましたが、既存のjsondataを拡張するための解決策を見つけられなかったので、文字列として構築することに対するボーナスは受け取りませんでした。例えばもう1つの値を追加し、サブレベルを追加する。 Aを有し、そのサブレベル '{ \t "A" と、後Bを追加:1、 \t "B":[{ \t \t "A":1 \t}、{ \t \t "B" :2 \t} } '' ' –

+0

@ MatthisR.Wiora:MatthisR.Wiora:普通のPython辞書を最初にビルドします。これは完璧になるまで変更して拡張することができます。最後にjson.dumpsを呼び出してそれを有効にします文字列に変換する。 – RemcoGerlich

+0

私はそれを試してみる - ありがとう! –