5

基本的に、ネストなどのための適切なインデントを備えた「きれいな印刷」形式でExcelにエクスポートしたいJSON形式のテキストを基本的に含む文字列があります.

読みやすくするために、キー/値の元の順序を維持することが不可欠です。自分がやりたいことを達成するための私の思考プロセスは、

a) eval などを使用して文字列を辞書に変換し、b) コレクション ライブラリの OrderedDict を使用して順序を維持します。

ただし、期待した結果が得られません。

In [21]: json_string = str({"id":"0","last_modified":"undefined"})
In [22]: OrderedDict(eval(json_string))
Out[23]: OrderedDict([('last_modified', 'undefined'), ('id', '0')])

出力をきれいな印刷形式でExcelに書き込む方法もまだよくわかりませんが、それが比較的簡単な部分になることを願っています!

4

3 に答える 3

19

object_pairs_hookJSONDecoder への引数を使用して、デコードされた辞書をOrderedDictに変更できます。

import collections
import json

decoder = json.JSONDecoder(object_pairs_hook=collections.OrderedDict)

json_string = '{"id":"0","last_modified":"undefined"}'
print decoder.decode(json_string)
json_string = '{"last_modified":"undefined","id":"0"}'
print decoder.decode(json_string)

これは以下を出力します:

OrderedDict([(u'id', u'0'), (u'last_modified', u'undefined')])
OrderedDict([(u'last_modified', u'undefined'), (u'id', u'0')])
于 2013-05-20T01:05:39.830 に答える
6

まず、の代わりにjson(または) を使用することを検討する必要があります。ast.literal_evaleval

第二に、通常の辞書に変換した瞬間にすべての順序が失われるため、これは機能しません。情報を OrderedDict に入れたい場合は、「json」を自分で解析する必要があります。

ast幸いなことに、このモジュールを使用すれば、これは思ったほど難しくありません。ここでは、辞書には文字列のみが含まれていると想定していますが、他の目的で変更するのはそれほど難しくないはずです。

s = '{"id":"0","last_modified":"undefined"}'
import ast
from collections import OrderedDict
class DictParser(ast.NodeVisitor):
    def visit_Dict(self,node):
        keys,values = node.keys,node.values
        keys = [n.s for n in node.keys]
        values = [n.s for n in node.values]
        self.od = OrderedDict(zip(keys,values))

dp = DictParser()
dp.visit(ast.parse(s))
ordered_dict = dp.od
print ordered_dict
于 2013-05-20T00:53:45.493 に答える
0

この投稿は、文字列操作による文字列から Ordereddict への変換に関連しています。

https://stackoverflow.com/a/27177986/1128709

于 2014-11-27T20:01:42.133 に答える