0

私はjsonオブジェクトであるhtmlからテキスト入力を取り、それに取り組んでいます。しかし、次のコードを試していると、エンコードとデコードでエラー/(ページがレンダリングされていません) が発生しますJSON

@app.route('/', methods=['POST'])
def my_form_post():

    text = request.form['text']
    #getting text-input as text = {'a':'1','b':'2'}

    json_input = json.dumps(text)
    ordered_json = json.loads(text, object_pairs_hook=ordereddict.OrderedDict)
    print ordered_json
    processed_text = htmlConvertor(ordered_json)
    #rep(jso)
    return render_template("my-form.html",processed_text=processed_text)

しかし、すべてが正常に機能しているため、ローカルJSON変数を使用してそうする必要がある場合。jsohtml-input を指定したときと同じ入力で、エラーが発生し、Internal Server Error を表示する以外はエラーが表示されません サーバーで内部エラーが発生し、リクエストを完了できませんでした。サーバーが過負荷になっているか、アプリケーションにエラーがあります。

 @app.route('/', methods=['POST'])
        def my_form_post():

            jso = '''{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}'''

        json_input = json.dumps(jso)
        ordered_json = json.loads(jso, object_pairs_hook=ordereddict.OrderedDict)
        print ordered_json
        processed_text = htmlConvertor(ordered_json)
        #rep(jso)
        return render_template("my-form.html",processed_text=processed_text)

アップデート:

現在はすべて正常に機能していますが、整数の場合は機能していません。例:

{"name":"yo","price":"250"}

完全に動作しますが、

{"name":"yo","price":250}

違います。その解決策は何ですか?特定の答えがあるかinteger、Pythonでチェックしてから、JSON関連するメソッドを適用して機能する前に文字列に変換する必要があります。

4

1 に答える 1

1

これがあなたの問題かどうかは{'a':'1','b':'2'}わかりませんが、一重引用符のために有効な JSON オブジェクトではありません:

>>> json.loads("{'a':'1','b':'2'}")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode
    obj, end = self._scanner.iterscan(s, **kw).next()
  File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib64/python2.6/json/decoder.py", line 171, in JSONObject
    raise ValueError(errmsg("Expecting property name", s, end))
ValueError: Expecting property name: line 1 column 1 (char 1)

代わりに二重引用符を使用すると、すべて正常に機能します。

>>> json.loads("{\"a\":\"1\",\"b\":\"2\"}")
{u'a': u'1', u'b': u'2'}

また、例外が発生したときにコード 500 エラーの代わりにスタック トレースを取得するには、次のようにフラスコ サーバーを起動する必要があることに注意してください。

app.run(debug = True)
于 2013-09-17T17:50:54.727 に答える