JSON数据被识别为字符串字段而不是整数

时间:2015-04-07 02:02:24

标签: python json encoding findall

我使用下面的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)

2 个答案:

答案 0 :(得分:1)

单独出现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

您可以在不使用string的情况下将int值转换为json.loads,但是,使用json.loads将其转换为列表或dict更容易管理和检索值。如果您对type json.dump您的x = json.dump(json_data,f,ensure_ascii=True) print(type(x)) 结果感到好奇,请尝试:

{{1}}

https://docs.python.org/3.3/library/json.html

答案 1 :(得分:0)

如果您正在寻找JS解决方案,只需使用

parseInt(x)