Pythonがjsonを解析する際に「string indices must be integers」の問題解決方法を提示する

3010 ワード

この例では、Pythonがjsonを解析する際に「string indices must be integers」と提示する問題解決方法について説明します.import jsonですが、奇妙な問題が発生しました.
string indices must be integers
このエラーは、[ ]の中に文字列ではなく数字が入っているはずだと教えてくれましたが、dictはkeyを使ってアクセスしてもいいです.このエラーは解析された結果がlistのように感じられます.
だから文字列解析の問題だと考えます.印刷解析の結果、長い文字列で、keyの山が押し合い、valueが欠けています.元の文字列を印刷すると、いくつかの詳細が見つかり、keyは「{a:"abcde",b:"abcde"}」に似た二重引用符で囲まれていません.
はい、これはjson仕様に合わない文字列です.それを処理するには、正規表現を使用して仕様のkeyに変換して再解析したり、他の機能のより強力なライブラリであるdemjsonを使用したりすることができます.pip install demjson、解決します.
jsonの使い方:

import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = json.dumps(data)
print json


結果:
[{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}]

import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print text


結果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
demjsonの使い方:

import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json


結果:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]

import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print text


結果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}

import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json


結果:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]

import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print text


結果:
{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
PS:ここでは、より実用的なjsonオンラインツールをいくつかお勧めします.
オンラインJSONコード検査、検査、美化、フォーマットツール:http://tools.jb51.net/code/json
JSONオンラインフォーマットツール:http://tools.jb51.net/code/jsonformat
オンラインXML/JSON相互変換ツール:http://tools.jb51.net/code/xmljson
jsonコードオンラインフォーマット/美化/圧縮/編集/変換ツール:http://tools.jb51.net/code/jsoncodeformat
オンラインjson圧縮/エスケープツール:http://tools.jb51.net/code/json_yasuo_trans
Pythonの関連内容に興味のある読者は、「Python操作jsonテクニック総括」、「Pythonコード操作テクニック総括」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニック総括」、「Python文字列操作テクニック要約」、『Python入門と進級経典教程』及び『Pythonファイルとディレクトリ操作技術要約』
ここではPythonプログラムの設計に役立つことを願っています.