【问题标题】:Splitting JSON python string拆分 JSON python 字符串
【发布时间】:2021-05-27 17:26:18
【问题描述】:

我想知道如何将这个 json 分成 3 种不同的电影类型,以便更好地检索每个电影的评分,然后返回一个列表,从最高到最低的评分显示它们。我已经尝试过 pythons split("}") 但是当我尝试执行我的其他操作(例如 convertToJSON() 函数)时,我得到一个错误,说它不再是一个 json 对象并且不应该是一个列表。这也不能很好地正确分割电影

import json

def convertToJSON(movieData):
    return json.loads(movieData)

#JSON string python object

Data = """[{ "title": “Spider-Man Homecoming”, 

“Studio: “Marvel”, “Rating”: 98, “videoType: “Movie" },

{ "title": “Avengers Endgame”, 
“Studio: “Marvel”, “Rating”: 90, “videoType: “Movie" },

{ "title": “Godzilla vs  Kong”, 
“Studio: “
    Warner Bros. Pictures”, “Rating”: 89, “videoType: “Movie" }]”””

我正在尝试拆分以某种方式返回这样的列表:

'Spider-Man Homecoming': 98
'Avengers Endgame': 90
'Godilla vs Kong': 89

【问题讨论】:

    标签: python json python-3.x split


    【解决方案1】:

    Data 是一个由字典列表组成的 json 字符串。简单地将其分解为子字符串会导致 json 无效并产生您描述的错误。最简单的解决方案是预先解码整个 json 字符串,然后从 dicts 的结果列表中获取您想要的信息:

    >>> Data = """
    [{ "title": "Spider-Man Homecoming", 
    "Studio": "Marvel", "Rating": 98, "videoType": "Movie" },
    
    { "title": "Avengers Endgame", 
    "Studio": "Marvel", "Rating": 90, "videoType": "Movie" },
    
    { "title": "Godzilla vs  Kong", 
    "Studio": "Warner Bros. Pictures", "Rating": 89, "videoType": "Movie" }]
    """
    >>> import json
    >>> movies = json.loads(Data)
    >>> movies
    [{'title': 'Spider-Man Homecoming',
      'Studio': 'Marvel',
      'Rating': 98,
      'videoType': 'Movie'},
     {'title': 'Avengers Endgame',
      'Studio': 'Marvel',
      'Rating': 90,
      'videoType': 'Movie'},
     {'title': 'Godzilla vs  Kong',
      'Studio': 'Warner Bros. Pictures',
      'Rating': 89,
      'videoType': 'Movie'}]
    
    >>> {m['title']: m['Rating'] for m in movies}
    {'Spider-Man Homecoming': 98, 'Avengers Endgame': 90, 'Godzilla vs  Kong': 89}
    

    (请注意您帖子中的 Data 字符串包含拼写错误和非 ASCII 引号。)

    【讨论】:

      【解决方案2】:

      不太确定你的 JSON 数据有什么问题,但我试着稍微美化一下,这可能不是你想要的,但它可以完成工作:)

      import json
      
      Data = '''[{ "title": "Spider-Man Homecoming",
      
      "Studio": "Marvel", "Rating": 98, "videoType": "Movie" },
      
      { "title": "Avengers Endgame",
      "Studio": "Marvel", "Rating": 90, "videoType": "Movie" },
      
      { "title": "Godzilla vs  Kong",
      "Studio": "Warner Bros. Pictures", "Rating": 89, "videoType": "Movie" }]'''
      
      
      movies = json.loads(Data)
      
      ratings = {m['title']: m['Rating'] for m in movies}
      
      print(ratings)
      

      【讨论】:

      • 感谢您回来!这正是我一直在寻找的,谢谢!如果我想检索实际评级值并为其添加一个值,我将如何执行此操作?例如,我为哥斯拉检索到 89 的评分,我想添加 4,所以现在评分为 93。我该怎么做?
      【解决方案3】:

      你最多可以用它做一个听写。
      json.loads()
      然后,您可以在下面按照您想要的方式打印字典。
      列表不起作用,因为它只能是 [value, value, value]

      【讨论】:

        【解决方案4】:

        正如之前的海报所暗示的,最好用json.loads() 加载它,然后用类似的东西对其进行迭代

        for movie in json.loads(Data):
           [...]
        

        然后您可以使用 movie['title'] 访问它并构建您的列表

        PS:当我在https://jsonlint.com 上尝试时,您发布的 json 数据有一些问题

        这里有点漂亮:

        Data = """[{
                "title": "Spider - Man Homecoming",
                "Studio": "Marvel",
                "Rating": 98,
                "videoType": "Movie"
            },
            {
                "title": "Avengers Endgame",
                "Studio": "Marvel",
                "Rating": 90,
                "videoType": "Movie"
            },
        
            {
                "title": "Godzilla vs Kong",
                "Studio": "Warner Bros.Pictures",
                "Rating": 89,
                "videoType": "Movie"
            }
        ]"""
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-11
          • 2010-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多