正确处理带有数组的json-string

时间:2016-08-25 12:41:51

标签: python json

我想找到一种方法来处理包含Python中数组的json输入。我所拥有的是以下内容:

import json

def main():
    jsonString = '{"matrix":[["1","2"],["3","4"]]}'
    jsonMatrix = json.loads(jsonString)
    Matrix = jsonMatrix["matrix"]
    term1 = Matrix[0][0]       # yields: '1'   expected: 1
    term2 = Matrix[0][1]       # yields: '2'   expected: 2

    result = term1 + term2     # yields: '12'   expected: 3
    return

if __name__ == "__main__":
    main()

到目前为止,我已经找到了" json.loads"将json转换为python对象。但是,数字仍然表示为字符串。当然,我可以进行以下转换之一:

Matrix = map(int, Matrix[0])
term1 = Matrix[0]
term2 = Matrix[1]

term1 = map(int, Matrix[0][0])
term2 = map(int, Matrix[0][1])

但是,我正在寻找一种简单的方法将整个" Matrix" -object转换为int而不仅仅是Matrix [0]或Matrix [0] [0]例如。所以我正在寻找以下的正确版本:

Matrix = map(int, Matrix)
term1 = Matrix[0][0]
term2 = Matrix[0][1]

result = term1 + term2 

我知道我可以使用for循环进行这种转换,但我想有更好的方法可以使用更高效的代码吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

import json

def main():
    jsonString = '{"matrix":[["1","2"],["3","4"]]}'
    jsonMatrix = json.loads(jsonString)
    # convert entire matrix to integers
    Matrix = [[int(v) for v in row] for row in jsonMatrix["matrix"]]
    term1 = Matrix[0][0]       # yields: 1
    term2 = Matrix[0][1]       # yields: 2

    result = term1 + term2
    print('result: {}'.format(result))  # -> result: 3
    return

if __name__ == "__main__":
    main()

答案 1 :(得分:0)

这是非常基本的,抱歉,但您可以通过以下任何一种方法将字符串转换为整数。

new=map(int,Matrix[0])
term1=new[0]       
term2=new[1]       

将字符串转换为数字,然后使用它们

term1=int(Matrix[0][0])
term2=int(Matrix[0][1])

您还可以执行以下操作:

j=[map(int, y) for y in Matrix]
term1=j[0][0]
term2=j[0][1]

我希望这会有所帮助。