JSON 数据被识别为字符串字段而不是整数
JSON data recognized as a string field instead of integer
我使用下面的 python 代码来操作指定文件夹中的一组 JSON 文件。我从数据中提取 nt
并且我想创建新的键值对。如果我要在屏幕上打印 nt
,我会得到如下所示的值。
nt 223
nt 286
nt 315
对我来说这些看起来像整数。但是,如果我使用 Kibana 可视化工具进行处理,它会这样说(即 NXT
是一个分析过的字符串字段)。我希望这些值被识别为整数?这与我对 json 文件 (ensure_ascii=True
) 进行编码的方式有关,还是 JSON value
始终是字符串?
#Process 'new' events to extract more info from 'Messages'
rootDir = '/home/s_parts'
for dirName, subdirList, fileList in os.walk(rootDir):
for fname in fileList:
fname='s_parts/'+fname
with open(fname, 'r+') as f:
json_data = json.load(f)
m = json_data['Msg']
nt = int(re.findall(r"NXT:\s*([^,m)]*)",m)[0])
json_data["NXT"] = nt
f.seek(0)
json.dump(json_data,f,ensure_ascii=True)
看来 json.dump
很可能将所有内容都视为字符串。在它应该将其转换为列表或字典后使用 json.loads
允许您将 json 值用作整数。
示例:
x = json.dumps({'1': 2, '3': 4}, ensure_ascii=True, sort_keys=True)
y = json.loads(x)
print(y)
print(y['3']+1)
输出:
{u'1': 2, u'3': 4}
5
您可以在不使用 json.loads
的情况下将 string
值转换为 int
,但是,使用 json.loads 将其转换为列表或字典更容易管理和检索值。如果您对 type
感到好奇,您的 json.dump
结果是尝试这样做:
x = json.dump(json_data,f,ensure_ascii=True)
print(type(x))
我使用下面的 python 代码来操作指定文件夹中的一组 JSON 文件。我从数据中提取 nt
并且我想创建新的键值对。如果我要在屏幕上打印 nt
,我会得到如下所示的值。
nt 223
nt 286
nt 315
对我来说这些看起来像整数。但是,如果我使用 Kibana 可视化工具进行处理,它会这样说(即 NXT
是一个分析过的字符串字段)。我希望这些值被识别为整数?这与我对 json 文件 (ensure_ascii=True
) 进行编码的方式有关,还是 JSON value
始终是字符串?
#Process 'new' events to extract more info from 'Messages'
rootDir = '/home/s_parts'
for dirName, subdirList, fileList in os.walk(rootDir):
for fname in fileList:
fname='s_parts/'+fname
with open(fname, 'r+') as f:
json_data = json.load(f)
m = json_data['Msg']
nt = int(re.findall(r"NXT:\s*([^,m)]*)",m)[0])
json_data["NXT"] = nt
f.seek(0)
json.dump(json_data,f,ensure_ascii=True)
看来 json.dump
很可能将所有内容都视为字符串。在它应该将其转换为列表或字典后使用 json.loads
允许您将 json 值用作整数。
示例:
x = json.dumps({'1': 2, '3': 4}, ensure_ascii=True, sort_keys=True)
y = json.loads(x)
print(y)
print(y['3']+1)
输出:
{u'1': 2, u'3': 4}
5
您可以在不使用 json.loads
的情况下将 string
值转换为 int
,但是,使用 json.loads 将其转换为列表或字典更容易管理和检索值。如果您对 type
感到好奇,您的 json.dump
结果是尝试这样做:
x = json.dump(json_data,f,ensure_ascii=True)
print(type(x))