python - 在 Python 中漂亮地打印 JSON.dump 二维数组

标签 python json multidimensional-array pretty-print

我正在编写一个 python 瓦片 map 编辑器。我使用自己设计的代码来编写和解析一些文件,但代码非常困惑,因此为了简单起见,我改用 JSON。

我的json文件是这样手工制作的:

{ "Level" :

     {

    "levelName": "simpleLevel",

    "background":   [[12, 2,12, 2, 1, 2, 3, 3, 1, 1],
                     [ 1, 1, 7, 8, 5, 6, 7, 8,12, 3],
                     [ 1, 3, 1, 3,12,10,10, 1,12,12],
                     [ 2,12, 0, 4,10, 3,12, 2,12,12],
                     [12,12, 1, 1,10, 3,12, 2,12, 1],
                     [12,12,12, 0,10, 2, 1,12, 1,12],
                     [ 3,12, 3,12, 0, 2, 2,12,12, 3],
                     [ 1,12, 1,12, 1, 1,12,12, 3,12],
                     [ 3,12, 0,12,12,12,12,12, 3, 3],
                     [12, 3, 1, 2, 3,12,12,12, 1,12]],

    "foreground":   [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 3, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    }
}

但是,当我使用json.dump(self.x, f)时我的输出在一行中,当我尝试使用这些参数 sort_keys=True, indent=4, separators=(',', ': ') 时我得到了一千个换行符..

我只是想要与我的手工文件类似的东西,因为它更容易手动阅读和编辑。我可以找到一些简单数组的解决方案,但没有任何适用于二维数组的解决方案。有一个简单的答案还是我应该自己编码?

编辑:

我自己编码(在网络的一些帮助下..)

def fwriteKeyVals(data, f, indent=0):
    if isinstance(data, list):
        f.write( "\n" + "    " * indent + "[" )  
        for i in range(len(data) ):  
            if ( i == 0):
                f.write( "[" )  
            else:
                f.write( "    " * indent + " [" )
            for j in range(len(data[0])):  
                f.write( "%3d" % data[i][j] )  
                f.write( "," ) if j != len(data[0])-1 else (f.write( "]," ) if i != len(data)-1 else f.write( "]" ))  
            f.write( "\n" ) if i != len(data)-1 else f.write( "]" )  
    elif isinstance(data, dict):
        f.write( "\n" + "    " * indent + "{" )
        for k, v in data.iteritems():
            f.write( "\n" + "    " * indent + "\"" + k + "\"" + ": ")
            fwriteKeyVals(v, f, indent + 1)
            if( data.keys()[-1] != k):
                 f.write( "," )
        f.write( "\n" + "    " * indent + "}" )
    else:
        f.write("\"" + data + "\"")

用法是:

fwriteKeyVals(x, f)

哪里x = json.load(f)f是我加载的文件 f = open( map , "wb" ) .

最佳答案

您应该查看pprint ,一个用于 Python 数据结构的 Python 模块。以下代码应该为您提供所需的打印结果:

# x -> your json dict
import pprint
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(x)

关于python - 在 Python 中漂亮地打印 JSON.dump 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25194788/

相关文章:

python - numpy RFFT/IRFFT音量

python - 如何在 Python 中创建目录中的文件列表

java - 将数组转换为多维数组 - Java

java - 数独板上的着色框算法

python - 根据多种条件将列表中的项目替换为其他项目(小列表)

python - Django 管理员添加自定义过滤器

javascript - json.stringify 没有在主对象下的所有对象上调用 toJson

html - 使 html 标签从 Angular 指令模板中的 json 正确渲染

java - 将混合的 long 和 double 读入同一变量

php - 在日历中如何在 codeigniter 中突出显示所有日期