首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除Python中JSON文件中的空格和\n

如何删除Python中JSON文件中的空格和\n
EN

Stack Overflow用户
提问于 2020-12-18 07:12:42
回答 3查看 3.5K关注 0票数 0

我有JSON数据以以下格式进入S3:

代码语言:javascript
复制
{\n  \"data\": {\n    \"event_type\": \"message.received\",\n    \"id\": \"819\",\n    \"occurred_at\": \"2020-10\",\n    \"payload\": {\n      \"cc\": [],\n      \"completed_at\": null,\n      \"cost\": null,\n      \"direction\": \"inbound\",\n      \"encoding\": \"GSM-7\",\n      \"errors\": [],\n      \"from\": {\n        \"carrier\": \"Verizon\",\n        \"line_type\": \"Wireless\",\n        \"phone_number\": \"+111111111\"\n      },\n      \"id\": \"e8e0d1e3-dce3-\",\n      \"media\": [],\n      \"messaging_profile_id\": \"400176\",\n      \"organization_id\": \"717d556f-ba4f-\",\n      \"parts\": 1,\n      \"received_at\": \"2020-1\",\n      \"record_type\": \"message\",\n      \"sent_at\": null,\n      \"tags\": [],\n      \"text\": \"Hi \",\n      \"to\": [\n        {\n          \"carrier\": \"carr\",\n          \"line_type\": \"Wireless\",\n          \"phone_number\": \"+111111111\",\n}\n}"

我想让它变成这样:

代码语言:javascript
复制
{
  "data": {
    "event_type": "message.received",
    "id": "76a60230",
    "occurred_at": "2020-12-1",
    "payload": {
      "cc": [],
      "completed_at": null,
      "cost": null,
      "direction": "inbound",
      "encoding": "GSM-7",
      "errors": [],
      "from": {
        "carrier": "Verizon",
        "line_type": "Wireless",
        "phone_number": "+1111111111"
      },
      "id": "06c9c765",
      "media": [],
      "messaging_profile_id": "40017",
      "organization_id": "717d5",
      "parts": 1,
      "received_at": "2020-1",
      "record_type": "message",
      "sent_at": null,
      "tags": [],
      "text": "Hi",
      "to": [
        {
          "carrier": "abc",
          "line_type": "Wireless",
          "phone_number": "+1111111111",
          "status": "delivered"
        }
      ],
      "type": "SMS",
      "valid_until": null,
      "failover_url": null,
      "url": "https://639hpj"
    },
    "record_type": "event"
  },
  "meta": {
    "attempt": 1,
    "delivered_to": "https://639hpj"
  }
}

我保存的第一个JSON数据是行的,而不是Struct格式的。我没有保留实际的JSON数据,但它是以类似的格式保存的(但有效)。我想运行一个lambda函数,其中JSON数据不受\n和空格的限制。

上面的2JSON数据不是相同的,但是我将接收第一种类型的JSON数据,我想将它转换为第二种类型,它没有空格和\n

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-18 08:33:37

您意识到空格和换行符是print用于格式化的吗?

让我们将t称为您的第一个json (我在后面添加了缺少的括号来修正它):

代码语言:javascript
复制
t = '''{\n "data": {\n "event_type": "message.received",\n "id": "819",\n "occurred_at": "2020-10",\n "payload": {\n "cc": [],\n "completed_at": null,\n "cost": null,\n "direction": "inbound",\n "encoding": "GSM-7",\n "errors": [],\n "from": {\n "carrier": "Verizon",\n "line_type": "Wireless",\n "phone_number": "+111111111"\n },\n "id": "e8e0d1e3-dce3-",\n "media": [],\n "messaging_profile_id": "400176",\n "organization_id": "717d556f-ba4f-",\n "parts": 1,\n "received_at": "2020-1",\n "record_type": "message",\n "sent_at": null,\n "tags": [],\n "text": "Hi ",\n "to": [\n {\n "carrier": "carr",\n "line_type": "Wireless",\n "phone_number": "+111111111"\n}\n]\n}}}'''

它印的是:

代码语言:javascript
复制
>>> print(t)
{
 "data": {
 "event_type": "message.received",
 "id": "819",
 "occurred_at": "2020-10",
 "payload": {
 "cc": [],
 "completed_at": null,
 "cost": null,
 "direction": "inbound",
 "encoding": "GSM-7",
 "errors": [],
...

要获得预期的表示形式,您应该:

  1. 将其加载到Python:js = json.loads(t)
  2. 将其转储回带有2作为缩进的字符串:t2 = json.dumps(js) t2实际上看起来像'{\n "data": {\n "event_type": "message.received",\n "id": "819",\n "occurred_at": "2020-10",\n "payload": {\n "cc": [],\n "completed_at": null,\n "cost": null,\n ...
  3. 打印:打印(T2){“数据”:{ "event_type":"message.received","id":"819","occurred_at":"2020-10",“有效载荷”:{ "cc":[],"completed_at":空,“成本”:空,“指示”:“入站”,“编码”:"GSM-7",“错误”:[],“从”:{“承运人”:"Verizon","line_type":“无线”,.

一艘班轮可以是:

代码语言:javascript
复制
print(json.dumps(json.loads(t), indent=2))
票数 1
EN

Stack Overflow用户

发布于 2020-12-18 07:20:07

您可以首先将其加载为Python字典,其中包含:

代码语言:javascript
复制
import json

myDict = json.loads(jsonString)

然后,将其转换回最小化/缩进的JSON字符串:

代码语言:javascript
复制
minimizedJSON = json.dumps(myDict)
indentedJSON = json.dumps(myDict, indent = <# of spaces>)
票数 0
EN

Stack Overflow用户

发布于 2020-12-18 07:32:37

通常,这是通过评估完成的,它将把您的字符串解析为python字典

代码语言:javascript
复制
import ast

# replace with full string of yours
s='{\n "data": {\n "event_type": "message.received",\n "id": "819"\n}\n}'

result = ast.literal_eval(s)

print(type(result), result)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65353036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档