2016-08-25 1 views
0

파이썬에서 배열을 포함하는 json 입력을 처리하는 방법을 찾고 싶습니다. 내가 가지고있는 것은 다음과 같다 : 나는 파이썬 객체로 JSON 변환 "json.loads"를 찾아 달성 한 지금까지배열로 json-string을 적절하게 처리하십시오.

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() 

. 그러나 숫자는 여전히 문자열로 표시됩니다. 물론 나는 다음과 같은 변환 중 하나를 수행 할 수 :

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

또는 그러나

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

, 나는 int 형보다는 할 수있는 전체 "매트릭스"-object를 변환하는 쉬운 방법을 찾고 있어요 예를 들어 Matrix [0] 또는 Matrix [0] [0]. 그래서 나는 다음의 올바른 버전을 찾고 있어요 :

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

result = term1 + term2 

내가 루프를 사용하여이 변환을 할 수 있다는 것을 알고 있지만, 좀 더 효율적인 코드와 더 나은 방법이있을 것 같아요?

도움 주셔서 감사합니다.

답변

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() 
+0

답변을 주셔서 감사합니다. 그러나 전체 "매트릭스"개체를 변환하고 싶습니다. 위의 편집을 참조하십시오. – BJPrim

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] 

도움이 되었기를 바랍니다.

+0

답변을 주셔서 감사합니다. 그러나 전체 "매트릭스"개체를 변환하고 싶습니다. 위의 편집을 참조하십시오. – BJPrim

관련 문제