当前位置: 首页 > 知识库问答 >
问题:

将json-(utf-8)转换为json(unicode转义)

祁坚壁
2023-03-14

嗨,我在Python中将utf-8 json转换成unicode escape json时遇到了一些问题

我知道如何将utf-8.txt转换为unicodeescape.txt

with open("input.txt", "r", encoding='utf8') as f:
    text = f.read()

with open('output.txt', 'w', encoding='unicode-escape') as f:
    f.write(text)

但是,我在Python中使用json模块时遇到了上面应用的问题,如下所示

with codecs.open(self.input,'r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

with codecs.open(self.output,'w', encoding='unicode-escape') as json_file:
    prepare_json = json.dumps(json_data, ensure_ascii=False)
    json_file.write(prepare_json)

它保存得很好,但是,当涉及到json中的双引号(“)时,它会自动添加双反斜杠(\\),因此unicode-esc.json文件在调用python脚本时无法正常工作。

假设一下

1. Input file (UTF-8): {"context" : "-\" 너"} 

我通过上面的第二个代码块转换它

2. Output file (UNICODE-ESCAPED) : {"context" : "-\\" \ub108"}
3. What I want (UNICODE-ESCAPED) : {"context" : "-\" \ub108"}

由于在双引号前面有双反斜杠,Python在加载unicode转义的json文件时会显示错误。

更多详细信息

输入文件:。/simple_test.json

{"context" : "-\" 너"}
with codecs.open('./simple_test.json', 'r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

prepare_json = json.dumps(json_data, ensure_ascii=False)
prepare_json
>>> '{"context": "-\\" 너"}'
repr(prepare_json)
>>> '\'{"context": "-\\\\" 너"}\''
print(prepare_json)
>>> {"context": "-\" 너"} 

所以它应该输出{“context”:“-”\ub108“},它只是{“上下文”:“–”너"}.

Output.json(I excpected}
{"context": "-\" \ub108"}

但是,使用下面的代码,我得到了

with codecs.open('./simple_test_out.json','w', encoding='unicode-escape') as json_file:
    json_file.write(prepare_json)
Output.json
{"context": "-\\" \ub108"}

经过几次尝试,我发现这只有在写入编码=“unicode-转义”格式的文件时才会发生。并将原始字符串替换为奇数个反斜杠将不起作用。

任何建议或想法将不胜感激!

import codecs
import json

with codecs.open('./simple_test.json','r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

with codecs.open('.=simple_test_out.json','w', encoding='utf-8') as json_file:
    prepare_json = json.dumps(json_data, ensure_ascii=False)
    json_file.write(prepare_json)

这只是工作正常。

import codecs
import json

with codecs.open('./simple_test.json','r', encoding='utf-8') as json_file:
    json_data = json.load(json_file)

with codecs.open('.=simple_test_out.json','w', encoding='unicode-escape') as json_file:
    prepare_json = json.dumps(json_data, ensure_ascii=False)
    json_file.write(prepare_json)

但是这不行,这是我想要的格式

共有1个答案

江承嗣
2023-03-14

看起来您只是想要< code >确保_ascii=True(默认):

C:\>type input.json
{"context" : "-\" 너"}

C:\>py
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> with open('input.json',encoding='utf8') as f:
...    data = json.load(f)
...
>>> data
{'context': '-" 너'}
>>> with open('output.json','w',encoding='utf8') as f:
...    json.dump(data,f)
...
>>> ^Z

C:\>type output.json
{"context": "-\" \ub108"}
 类似资料:
  • 问题内容: 我的数据采用以下格式:或类似。我想将它们转换为UTF-8(原始字符是好和我)。我该怎么做? 问题答案: 这可能是最简单的解决方案。

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 我用的是美丽的汤。它给我一些超文本标记语言节点的文本,但是这些节点有一些Unicode字符,这些字符被转换为字符串中的转义序列。 例如,一个具有以下: 的 HTML 元素由美丽的汤检索,如:作为以下字符串:,这只能在 Python 控制台中读取。但是,当写入JSON文件时,它变得不可读。注意:我使用以下代码保存到 JSON 文件: 我如何将这些Unicode字符转换回UTF-8或任何使它们可读的东

  • 我有一个oracle DB,根据我们的DB管理,没有设置格式,但是当我们将数据导出到文本文件时,它是以utf-8的形式出现的 谁能帮我把这些文本文件转换成Unicode码吗

  • 问题内容: 我想将Intent的Extras Bundle转换为JSONObject,以便可以将其传递给JavaScript。 有没有快速或最佳的方法来进行此转换?如果不是所有可能的捆绑包都能正常工作,那就没关系了。 问题答案: 您可以用来获取捆绑软件包含的密钥列表。然后,您可以遍历这些键,并将每个键值对添加到中: 请注意,这将需要您抓住一个。 编辑: 有人指出,以前的代码不能很好地处理和键入。如

  • 问题内容: 我正在将Jersey用于REST WS,并且得到的响应为JSON。 我想将此响应转换为POJO。怎么做 ? 问题答案: 要在Java和JSON之间进行转换,有很多可供选择的API 。 您可以“手动”遍历JSON组件并提取值以填充Java对象,或者可以使用JSON到Java的绑定API来解决许多低级映射问题。