0

simplejsonのドキュメントを読みましたが、なぜ一重引用符でjsonオブジェクトを返すことがあるのか​​(phpでは理解できません)、二重引用符のエスケープされたシーケンスを返すのはなぜかわかりません(phpでも認識されません)。おそらく、バンドエイドとして出力文字列に対して正規表現を行うことができますが、問題の原因を理解したいと思います。

例:

入力:(Pythonの開始データ)

print stories

{'text':'HIV / AIDSある日、\ r \ nそれから私たちは彼女を家に連れて帰り、会議を呼び、村人たちに彼女の世話をし、彼女が前に彼女の生涯で必要とする良い世話をするべきだと言いました彼女は出発します。'、' id':1215L}

そして、健全性チェックとして、cherrypyがそれを取得する前にjsonオブジェクトは正常に見えます:

print simplejson.dumps( stories )

[{"text":"若者から若者へのエンパワーメント...yada yada yada ..."、 "id":12828}、{"text": "women ... yada yada yada ..."、 "id" :12828}]

...
import simplejson
return simplejson.dumps( stories )

[cherrypyでいくつかのあいまいな魔法が発生します...]jsonをブラウザーに渡すcherrypyの部分は次のとおりです。

@cherrypy.expose
def browse_stories(self):
    stories = test_org_match.browse_org_story_matches()
    cherrypy.response.headers['Content-Type'] = 'application/json'
    return json.dumps( stories )

出力(cherrypyを介してこのオブジェクトを呼び出すブラウザーに表示されるもの):

"[{\" text \ ":\"POVERTY野菜を盗むことにしました。私たちにできることは何もありませんでした。私たちは食べ物なしで2日間滞在しましたが、この3日目はついていけませんでした。私たちは何かを食べなければならなかった、さもなければ私たちは死ぬだろう。私たちはゆっくりとシャンバに向かって出発し、家に帰って料理をし、食べて気分が良くなりました。\ "、\" id \ ":33109}、{\" text \ ":\"BodaBado彼らは単に輸送ベースでは、人々はバダボダ輸送を使用して移動して時間を節約できます\ r \ nリレーは、村の奥深くにある農村の人々がオートバイの自転車を使用して自分自身を他の耳に輸送するのに役立ちました。\ "、\" id \ ":35931}]"

(囲まれたテキストは異なりますが、これはプルしているランダムなテキストスニペットのいずれかで発生します)

注:simplejsonがどこでも一重引用符で囲まれたオブジェクトを返すもう1つのケースは、実際の辞書ではなくstr(dictionary)を渡したためだと思います。もちろん、一重引用符で囲まれたjsonを提供すると、phpは機能しなくなります。しかし、「自由な」脱出は私を困惑させます-そして、私が思うに、cherrypyの中で起こっています。

4

1 に答える 1

2

私はそれを考え出した。私のコードはjson.dumps()を使用し、次にjson.dumpsを再び使用します-したがって、余分なエスケープ文字はjsonであり、これを辞書オブジェクトとしてではなく文字列として扱います。

于 2012-06-15T13:10:21.983 に答える