【发布时间】:2017-03-24 22:54:04
【问题描述】:
我在让json.load() 函数的for 循环读取“alarmst”字段并带回它们的值时遇到问题。
我在问题代码上方有工作代码,可以很好地使用相同的数据获取“标签”字段数据值。
我认为这可能与 dataStatus 和 dataStart 具有带分号的时间格式化数据有关,即 (2015-12-10T05:59:03Z) 所以我不确定如何解析这些数据或替换循环中的值中的字符在运行 writerow() 函数之前,或者如果有人知道更好的方法来告诉它这些特定字段的值的数据类型是 Date 或类似 Python 的明确类型。
没有额外的“alarmst”循环和日期格式数据的工作代码
import json
import csv
with open('C:\\folder\\dev\\Tags.txt',"r") as file:
data = json.load(file)
with open('C:\\folder\\dev\\Tags.csv',"w",newline='') as file:
csv_file = csv.writer(file)
for dev in data["devs"]:
for tag in dev["tags"]:
csv_file.writerow([tag['id'], tag['name'], tag['dataType'], tag['description'], tag['alarm'], tag['value'], tag['quality'], tag['DevTagId']])
有错误的问题代码
import json
import csv
with open('C:\\folder\\dev\\TagAlarms.txt',"r") as file:
data = json.load(file)
with open('C:\\folder\\dev\\TagAlarms.csv',"w",newline='') as file:
csv_file = csv.writer(file)
for dev in data["devs"]:
for tag in dev["tags"]:
for alarm in tag["alarmst"]:
csv_file.writerow(alarm['dateStatus'],[alarm['dateStart'], alarm['status'], alarm['type']])
错误
csv_file.writerow(alarm['dateStatus'], [alarm['dateStart'], alarm['status'], alarm['type']])
TypeError: string indices must be integers
样本数据
{
"success": true,
"moreDataAvailable": true,
"devs": [
{
"id": 111111,
"name": "dev123",
"tags": [
{
"id": 10100,
"name": "CleanTask",
"dataType": "Bool",
"description": "",
"alarmHint": "",
"value": 0,
"quality": "good",
"alarmst": {
"dateStatus": "2016-11-08T06:58:06Z",
"dateStart": "2016-11-08T06:22:16Z",
"status": "RTN",
"type": "None"
},
【问题讨论】:
-
您可以发布您的 json 数据样本吗?错误告诉你
alarm是一个字符串,而不是一个字典。 -
您的数据不是有效的 JSON 文件。
-
@kindall 我同意...这只是与我遇到的问题的一部分相关的有效 JSON 数据的一个示例。幸运的是,这个示例似乎为解决我的问题的答案描绘了一幅图画。
标签: python python-3.x dictionary typeerror