2016-09-28 10 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}}]}": "" 
    }, 

バックエンドの処理はPythonで行われます。上記の結果を元のオブジェクトに似ているdictに変換するモジュールはありますか?

+2

あなたは、おそらくJSONとして送信して、Pythonでオブジェクトにそれをデシリアライズしたほうが良いと思います。そんなに簡単ではない。 – haliphax

+0

要件はGET要求として送信することです。私はすでにJSON文字列を扱うことができるPOSTリクエストを行っています。 –

+0

'$ .param()'を使わずにGETメソッドを使ってjQueryでオブジェクトを送ることができます。あなたのデータがサーバー上でJSONとして終わることを確認したら、AJAXリクエストの結果として、あなたはうまくいくはずです。最悪のシナリオでは、 'dataType'を' 'json''に設定する必要があります。 – PHPglue

答えて

1

私たちはコメントの中で解読しているので、私は後世のために答えをここに掲載します。

JavaScript側でJSON.stringifyの組み合わせを使用してデータ構造をシリアル化し、json.loadsをPython側でシリアル化してデシリアライズします。シリアライズされた構造体をクエリ文字列パラメータ(この例では "query")として渡し、Pythonのクエリ文字列パラメータから値を読み取ります。フツァ!

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

+0

JSONをJSON.stringify()する必要はありません。 jQuery。 – PHPglue

+0

jQueryを使用している場合は真です。私は少し混乱していました。なぜなら、OPはjQueryが各クライアントのための保証ではないと言っていたからです(jQueryがサンプルコードで使用されていますが)。 – haliphax

+0

OPは、クライアントがGETデータ自体ではなく、GETデータとして文字列を送信していると言っていますか?なぜOPは、Serverが自分のサーバー上の文字列を受け取ることを期待していますか?あなたのクライアントに、狂った文字列ではなく、POSTまたはGETデータを送信するよう要求します。 – PHPglue

関連する問題