【问题标题】:Is there a way to replace values in json from strings to list of strings有没有办法将json中的值从字符串替换为字符串列表
【发布时间】:2019-04-17 21:38:56
【问题描述】:

我正在尝试将 json 中的所有值转换为 json 中的字符串列表。 即使是嵌套的字典值也应该在列表中包含它们的值

发件人:

    {
        "ZipCodeType": "STANDARD", 
        "City": "AIBONITO", 
        "Name" : [
          {
            "EstimatedPopulation": "abc" 
            "LocationType": "PRIMARY", 
            "Zipcode": "00705"
          }
        ] 
    }

收件人:


    {
        "ZipCodeType": ["STANDARD"], 
        "City": ["AIBONITO"], 
        "Name" : [
          {
            "EstimatedPopulation": ["abc"], 
            "LocationType": ["PRIMARY"], 
            "Zipcode": ["00705"]
          }
        ] 
    }

【问题讨论】:

  • 使用您的旧 json 以列表形式创建新的字典。保存回json格式。完成。
  • 你为什么首先需要这样做?

标签: python json regex string


【解决方案1】:

你可以用一个简单的正则表达式来做到这一点

j="""
{
    "ZipCodeType": "STANDARD", 
    "City": "AIBONITO", 
    "Name" : [
      {
        "EstimatedPopulation": "abc" 
        "LocationType": "PRIMARY", 
        "Zipcode": "00705"
      }
    ] 
}
"""
import re
result = re.sub(r':\s*("[^"]*")',r': [\1]', j)

【讨论】:

  • 你可以,但你为什么会呢?当标准库中有一个实际的解析器时,为什么要冒着在其中一个值中引用引号的风险?
  • 不会解析字符串中的引号(请参阅[^"])。该问题被标记为regex 标签,因此我建议使用正则表达式解决方案。显然你可以使用上下文无关语法,就像原生的json 库一样,但是为什么呢?这个问题可以用有限状态转换器来回答。
  • 是的,这就是问题。一行 "foo": "\"bar\"", 变为 "foo": ["\"]bar\"",,这不再是有效的 JSON。几乎按照定义,OP 不知道他们在做什么,仅仅因为他们已将其标记为正则表达式并不意味着这是一个合适的工具;他们依靠回答者来告诉他们。
  • 你说得对,转义引号可能是个问题,也可以用正则表达式解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2011-01-10
  • 2020-07-29
  • 1970-01-01
  • 2023-01-30
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多