You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除字符串中的'\n'或正确将ByteIO转换为列表?

解决pycURL获取JSON数据时的转义字符与格式问题

我来帮你搞定这个问题!你的代码里有两个关键问题导致了多余的\n转义字符和不符合预期的JSON格式,咱们一步步拆解解决:

问题根源分析

  1. 多余的手动数组包裹:你在文件开头写了[ \n、结尾写了\n],但实际上目标API返回的本身就是一个合法的JSON数组(比如[{"txid": "xxx", ...}, ...]),这会让最终的JSON变成[ "[...原API返回内容...]" ]——相当于把数组字符串又套了一层数组,完全破坏了结构。
  2. 错误的JSON写入方式:你把解码后的字符串直接用json.dump()写入,这会把整个字符串当作JSON的一个字符串值,导致所有特殊字符(包括换行、双引号)都被自动转义,所以才会出现大量\n。

解决方案一:直接写入原始JSON字符串(无需修改数据时)

如果不需要对获取到的数据做任何修改,直接把API返回的JSON字符串写入文件即可,既不会产生转义,也不用手动处理数组结构:

import pycurl
from io import BytesIO

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://api.blockcypher.com/v1/eth/main/txs')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()

# 解码字节数据为字符串
body = buffer.getvalue().decode('UTF-8')

# 直接写入文件,API返回的已经是合法JSON
with open('data.json', 'w') as data_file:
    data_file.write(body)

解决方案二:解析为Python对象后写入(需要修改数据时)

如果需要对获取到的交易数据进行修改,先把JSON字符串解析成Python列表/字典,再用json.dump()写入,这样会自动处理格式,避免转义问题:

import pycurl
import json
from io import BytesIO

buffer = BytesIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://api.blockcypher.com/v1/eth/main/txs')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()

# 解码并解析为Python对象
body = buffer.getvalue().decode('UTF-8')
tx_list = json.loads(body)

# 这里可以对tx_list做修改,比如过滤特定交易
# tx_list = [tx for tx in tx_list if tx['confirmations'] > 0]

# 写入文件,indent参数可以让JSON更易读
with open('data.json', 'w') as data_file:
    json.dump(tx_list, data_file, indent=2, sort_keys=True, default=str)

为什么这两种方法能解决问题?

  • 第一种方法直接复用API返回的合法JSON,跳过了Python的JSON序列化步骤,自然不会产生多余转义。
  • 第二种方法先把JSON字符串解析成Python原生的列表对象,再用json.dump()序列化,此时程序会按照JSON规范生成正确的格式,不会把原数据里的换行符当作需要转义的内容。

内容的提问来源于stack exchange,提问作者I'l Follio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:44:18