Json 找到包含一些字符的键并将键和值写入新的 json 文件 python

Json find key contain some char and write key and value to new json file with python

我需要查找键是否包含破折号,而不是将此键和值获取到新的 json 文件。

这是我的代码:

#coding=utf-8
import os
import sys
import json
import fileinput

file_path = sys.argv[1]
file = open(file_path, 'r')
content = file.read()

dict = json.loads(content, encoding="utf-8")

output = "{"

for key in dict:
    if key.find("-") != -1:
        output = output + "%s: %s" % (key, unicode(dict[key]).encode('utf8'))
        print output

output = output + "}"

output = json.dumps(json.loads(output, encoding="utf-8"), indent=4, separators=(', ',': '), ensure_ascii=False).encode('utf8')

file_name = os.path.basename(file_path)
sort_file = open(file_name, 'a')
sort_file.write(output)
sort_file.close()

输出文件是:

u'login': u".//input[@placeholder='Email/ \u624b\u6a5f\u865f\u78bc/ 

有什么方法可以将 content_dict[key] 转换为不同于“\u78bc”的 utf-8 字符? 有什么好的方法可以找到包含一些字符的密钥并写入新的 json 文件?

您正在使用 Python 2,并且希望能够读取和写入包含非 ASCII 字符的 json 文件。

最简单的方法是仅使用 unicode 执行处理,以二进制模式执行文件 IO,并在读取时解码为 un​​icode 后将原始字节转换为 json,并编码 json在写入文件之前转换为字节。

代码应如下所示:

  file_path = sys.argv[1]
  # Read data as bytes
  with open(file_path, 'rb') as f:
      raw_data = f.read()
      # Decode bytes to unicode, then convert from json.
      dict_ = json.loads(raw_data.decode('utf-8'))

  output = {}

  for key, value in dict_.iteritems():
      # Using the in operator is the Pythonic way to check 
      # if a character is in a string.
      if "-" in key: 
          output[key] = value
          print output

  file_name = os.path.basename(file_path)
  with open(file_name, 'ab') as f:
      j = json.dumps(output, indent=4, separators=(', ', ': '), ensure_ascii=False)
      # Encode json unicode string before writing to file.
      f.write(j.encode('utf-8'))

在这段代码中,我使用了 with 语句来自动处理关闭打开的文件。

我也收集了要写成字典而不是字符串的数据。手动构建 json 个字符串通常会导致错误。

切换到 Python 3 将不再需要单独的编码和转换步骤,并且通常会简化对非 ASCII 数据的处理。

过滤原始字典的pythonic方式(使用python 2.7测试)是:

d1 = {'x-y': 3, 'ft': 9, 't-b': 7}
d2 = {k: v for k, v in d1.iteritems() if '-' in k}

print(d2)

输出

{'t-b': 7, 'x-y': 3}