使用JSON模块进行漂亮打印时,如何实现自定义缩进?

因此,我使用的是Python 2.7,使用该json模块对以下数据结构进行编码:


'layer1': {

    'layer2': {

        'layer3_1': [ long_list_of_stuff ],

        'layer3_2': 'string'

    }

}

我的问题是我正在使用漂亮的打印来打印所有内容,如下所示:


json.dumps(data_structure, indent=2)

太好了,除了我要缩进的全部内容(内容除外)外,"layer3_1"这是一个庞大的字典,列出了坐标,因此,每一个上设置一个值都可以使漂亮的打印创建具有数千行的文件,并带有示例如下:


{

  "layer1": {

    "layer2": {

      "layer3_1": [

        {

          "x": 1,

          "y": 7

        },

        {

          "x": 0,

          "y": 4

        },

        {

          "x": 5,

          "y": 3

        },

        {

          "x": 6,

          "y": 9

        }

      ],

      "layer3_2": "string"

    }

  }

}

我真正想要的是类似于以下内容的东西:


{

  "layer1": {

    "layer2": {

      "layer3_1": [{"x":1,"y":7},{"x":0,"y":4},{"x":5,"y":3},{"x":6,"y":9}],

      "layer3_2": "string"

    }

  }

}

我听说可以扩展该json模块:是否可以将其设置为仅在"layer3_1"对象内部时关闭缩进?如果是这样,有人可以告诉我如何吗?


青春有我
浏览 804回答 3
3回答

繁华开满天机

这是一个台阶,但是一旦您确定dumps()的内容的格式,就可以对它执行正则表达式替换,一旦您从dumps()获得了字符串即可。类似于以下内容:s = json.dumps(data_structure, indent=2)s = re.sub('\s*{\s*"(.)": (\d+),\s*"(.)": (\d+)\s*}(,?)\s*', r'{"\1":\2,"\3":\4}\5', s)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python