2016-09-28 1 views
1

URL에 GET 변수로 전달해야하는 "심층"JSON 문자열이 있습니다. jQuery.param 사용하여 인코딩 할 때parse decodeURIComponent Python을 사용하는 JSON 문자열

{ 
    "meta": { 
    "prune": true, 
    "returnFields": ["gf", "gh", "gh", "rt"], 
    "orient": "split" 
    }, 
    "indicators": [{ 
    "type": "beta", 
    "computeOn": "gf", 
    "parameters": { 
     "timeperiod": 5, 
     "nbdevup": 2, 
     "nbdevdn": 2, 
     "matype": 0 
    } 
    }, { 
    "type": "alpha", 
    "computeOn": "gf", 
    "parameters": { 
     "timeperiod": 30 
    } 
    }] 
}; 

는, 결과는 다음과 같다 : 그것은 다음과 같은 단지 직렬화를 사용하는 경우

var recursiveDecoded = decodeURIComponent(jQuery.param(body)); 
console.log(recursiveDecoded); 

meta[prune]=true&meta[returnFields][]=gf&meta[returnFields][]=gh&meta[returnFields][]=gh&meta[returnFields][]=rt&meta[orient]=split&indicators[0][type]=beta&indicators[0][computeOn]=gf&indicators[0][parameters][timeperiod]=5&indicators[0][parameters][nbdevup]=2&indicators[0][parameters][nbdevdn]=2&indicators[0][parameters][matype]=0&indicators[1][type]=alpha&indicators[1][computeOn]=gf&indicators[1][parameters][timeperiod]=30 

다음에 디코딩

var recursiveEncoded = jQuery.param(body); 
console.log(recursiveEncoded); 
meta%5Bprune%5D=true&meta%5BreturnFields%5D%5B%5D=gf&meta%5BreturnFields%5D%5B%5D=gh&meta%5BreturnFields%5D%5B%5D=gh&meta%5BreturnFields%5D%5B%5D=rt&meta%5Borient%5D=split&indicators%5B0%5D%5Btype%5D=beta&indicators%5B0%5D%5BcomputeOn%5D=gf&indicators%5B0%5D%5Bparameters%5D%5Btimeperiod%5D=5&indicators%5B0%5D%5Bparameters%5D%5Bnbdevup%5D=2&indicators%5B0%5D%5Bparameters%5D%5Bnbdevdn%5D=2&indicators%5B0%5D%5Bparameters%5D%5Bmatype%5D=0&indicators%5B1%5D%5Btype%5D=alpha&indicators%5B1%5D%5BcomputeOn%5D=gf&indicators%5B1%5D%5Bparameters%5D%5Btimeperiod%5D=30 

서버의 문자열 결과는 문자열을 키 값 쌍의 키로 유지합니다.

"query": { 
    "{\"meta\":{\"prune\":true,\"returnFields\":[\"gf\",\"gh\",\"gh\",\"rt\"],\"orient\":\"split\"},\"indicators\":[{\"type\":\"beta\",\"computeOn\":\"gf\",\"parameters\":{\"timeperiod\":5,\"nbdevup\":2,\"nbdevdn\":2,\"matype\":0}},{\"type\":\"alpha\",\"computeOn\":\"gf\",\"parameters\":{\"timeperiod\":30}}]}": "" 
    }, 

내 백엔드 프로세싱은 파이썬으로 처리됩니다. 위의 결과를 원래 개체와 비슷한 dict으로 변환하는 모듈은 무엇입니까?

+2

당신은 아마 JSON로 전송 한 후 파이썬의 객체로 직렬화 복원 더 나을 것입니다. 그런 식으로 덜 어지럽다. – haliphax

+0

요구 사항은 GET 요청으로 전송하는 것입니다. 이미 JSON 문자열을 처리 할 수있는 POST 요청을 수행했습니다. –

+0

'$ .param()'을 사용하지 않고 GET 메소드를 사용하여 jQuery에서 객체를 보낼 수 있습니다. 데이터가 서버에서 JSON으로 끝나는 지 확인하면 AJAX 요청의 결과로 정상이어야합니다. 최악의 경우,'dataType'을''json''으로 설정해야합니다. – PHPglue

답변

1

글쎄, 우리가 코멘트에서 해시했기 때문에, 나는 후손을 위해 대답을 게시 할 것이다.

JavaScript 측면에서 JSON.stringify의 조합을 사용하여 데이터 구조를 직렬화하고 파이썬 측에서 json.loads을 직렬화하여 역 직렬화합니다. 직렬화 된 구조체를 쿼리 문자열 매개 변수 (예제에서는 "query")로 전달한 다음 Python에서 해당 쿼리 문자열 매개 변수의 값을 읽습니다. 후자!

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

+0

JSON을 AJAX 메소드를 통해 보내기 전에'JSON.stringify() '할 필요는 없다. jQuery. – PHPglue

+0

jQuery를 사용하는 경우 true입니다. 나는 OP가 jQuery에 대해 (jQuery가 예제 코드에서 사용되었지만) 각 클라이언트에 대해 보장되지 않는다고 말했기 때문에 다소 혼란 스러웠다. – haliphax

+0

클라이언트가 GET 데이터 자체 대신 GET 데이터로 문자열을 전송하고 있음을 나타내는 OP입니까? 왜 OP는 서버가 자신의 서버에있는 문자열을 수신 할 것으로 기대합니까?고객이 미친 문자열이 아닌 POST 또는 GET 데이터를 보내도록 요구하십시오. – PHPglue