3

HTTP POST パラメーターを介して内部に JSON オブジェクトを含む JSON 配列を含む JSON オブジェクトを送信しようとしています。

パラメータの形式 (サーバーが期待するもの) は次のようなものです。

{""team"":[
    {""teamid"":""179228"",""position"":1},
    {""teamid"":""218036"",""position"":2},
    {""teamid"":""88109"",""position"":3},
    {""teamid"":""88111"",""position"":4},
    {""teamid"":""165536"",""position"":5},
    {""teamid"":""224645"",""position"":6}
]}

それにもかかわらず、送信されるものは次のとおりです。

{"team":"[
\"{\\\"position\\\":0,\\\"teamid\\\":\\\"88107\\\"}\",\"{\\\"position\\\":1,\\\"teamid\\\":\\\"88109\\\"}\",\"{\\\"position\\\":2,\\\"teamid\\\":\\\"156714\\\"}\",\"{\\\"position\\\":3,\\\"teamid\\\":\\\"138877\\\"}\",\"{\\\"position\\\":4,\\\"teamid\\\":\\\"168730\\\"}\",\"{\\\"position\\\":5,\\\"teamid\\\":\\\"88110\\\"}\",\"{\\\"position\\\":6,\\\"teamid\\\":\\\"88111\\\"}\",\"{\\\"position\\\":7,\\\"teamid\\\":\\\"134431\\\"}\",\"{\\\"position\\\":8,\\\"teamid\\\":\\\"88112\\\"}\",\"{\\\"position\\\":9,\\\"teamid\\\":\\\"138507\\\"}\",\"{\\\"position\\\":10,\\\"teamid\\\":\\\"138880\\\"}\",\"{\\\"position\\\":11,\\\"teamid\\\":\\\"138881\\\"}\",\"{\\\"position\\\":12,\\\"teamid\\\":\\\"151465\\\"}\",\"{\\\"position\\\":13,\\\"teamid\\\":\\\"151464\\\"}\
"]"}

その JSON オブジェクトを作成する方法は次のとおりです。

            JSONArray teamArray = new JSONArray();
            JSONObject jsonRoot = new JSONObject();
            for (int i = 0; i < mTeams.size(); i++) {
                String teamId = null;
                BaseModel data = mTeams.get(i);
                if (data != null && data instanceof TeamModel) {
                    teamId = ((TeamModel) data).getId();
                }
                JSONObject teamObject = new JSONObject();
                try {
                    teamObject.put(
                            getResources().getString(
                                    R.string.sendResortedTeamsPosition), i);
                    teamObject.put(
                            getResources().getString(
                                    R.string.sendResortedTeamsTeamId), teamId);
                    teamArray.put(teamObject);
                } catch (NotFoundException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            try {
                jsonRoot.put("team", teamArray);
                mNameValuePairs.put("teams", jsonRoot);
                    } catch (JSONException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }

最後の 2 行目 ( jsonRoot.put("team", teamArray);) では、最後の行で送信されるものと同じ形式ですが、 が 1 つ少ない\ため、明らかに「解析」される回数が 1 回少なくなります。

私のHTTPコードの一部:

String postBody = json.toString();
Log.d("HTTPHelper", "posting JSON: " + postBody);
((HttpPost) httpRequest).setEntity(new StringEntity(postBody));

なぜこうなった?ジャバですか?どうすれば正しいJSONを構築できますか? または回避策はありますか?

よろしくお願いします!

4

3 に答える 3

1

このタスクにはコードが多すぎます。このライブラリをチェックしてください https://github.com/kodart/Httpzoid 内部で GSON を使用し、オブジェクトを操作する API を提供します。JSON の詳細はすべて非表示になります。

Http http = HttpFactory.create(context);
http.get("http://example.com/users")
    .handler(new ResponseHandler<User[]>() {
        @Override
        public void success(User[] users, HttpResponse response) {
        }
    }).execute();
于 2013-07-14T12:59:48.697 に答える
0

ちょっとしたヒント...私は本当にAndroidには興味がなく、Javaだけです..しかし、jsonを両側でBase64で逆エンコードしてエンコードし、エンコードされた「文字列」を渡すことができます。

そのため、「汚い方法」の交換について心配する必要はありません。

これがあなたや他の人にも役立つことを願っています。:)

于 2015-05-27T12:56:51.083 に答える