在分割Json数据时获取TypeError?

时间:2017-06-02 09:49:43

标签: python arrays json

我有一个像这样的json数据:

json_data = '{"data":"[{"Date":"3/17/2017","Steam Total":60},{"Date":"3/18/2017","Steam Total":15},{"Date":"3/19/2017","Steam Total":1578},{"Date":"3/20/2017","Steam Total":1604}]", "data_details": "{"data_key":"Steam Total", "given_high":"1500", "given_low":"1000", "running_info": []}"}'

json_input_data = json_data["data"]
json_input_additional_info = json_data["data_details"]

我收到错误:

TypeError:字符串索引必须是整数,而不是str

我认为json数据中存在错误。有人可以帮我吗?

5 个答案:

答案 0 :(得分:2)

在你的代码中有一些问题。

  1. 代码:json_input_data = json_data["data"],变量json_data不是Json对象,是一个String对象,你尝试通过字符串键获取字符串位置,从字符串中获取一个Json对象json使用json api:json

  2. 你的Json字符串不是有效的,这是一个有效的版本:
    {"data":[{"Date":"3/17/2017","Steam Total":60},{"Date":"3/18/2017","Steam Total":15},{"Date":"3/19/2017","Steam Total":1578},{"Date":"3/20/2017","Steam Total":1604}], "data_details": {"data_key":"Steam Total", "given_high":"1500", "given_low":"1000", "running_info": []}}

  3. 现在,您的代码运行正常。

答案 1 :(得分:1)

尝试将 json_data 解析为JSON格式(使用JSON.parse(json_data))。目前它的类型是字符串 - 这正是你的错误所说的。

答案 2 :(得分:0)

你是对的。你的json确实是错的。

你可以尝试使用这个json吗?

{  
   "data":[  
      {  
         "   Date":"3/17/2017",
         "Steam Total":60
      },
      {  
         "Date":"3/18/2017",
         "Steam Total":15
      },
      {  
         "Date":"3/19/2017",
         "Steam Total":1578
      },
      {  
         "Date":"3/20/2017",
         "Steam Total":1604
      }
   ],
   "data_details":{  
      "data_key":"Steam Total",
      "given_high":"1500",
      "given_low":"1000",
      "running_info":[]
   }
}

答案 3 :(得分:0)

正如Pongpira Upra指出的那样,你的json形成不好,应该是这样的。

{  
   "data":[  
      {  
         "Date":"3/17/2017",
         "Steam Total":60
      },
      {  
         "Date":"3/18/2017",
         "Steam Total":15
      },
      {  
         "Date":"3/19/2017",
         "Steam Total":1578
      },
      {  
         "Date":"3/20/2017",
         "Steam Total":1604
      }
   ],
   "data_details":{  
      "data_key":"Steam Total",
      "given_high":"1500",
      "given_low":"1000",
      "running_info":[]
   }
}

为了检索信息,你应该写

json_data[0]["Date"]

这将打印“2017年3月17日”

答案 4 :(得分:0)

你声明一个名为json_data的字符串,然后它就像一个字符串。这就是异常告诉你的。像其他人一样试图说 - 你在你的数据中也有错误,但你提供的异常是因为访问字符串就像是字典一样。您需要添加一个丢失的电话,例如json.loads(...)