Відправка JSON як параметра HTTP POST (Android/Java)

Я намагаюся відправити об'єкт JSON, який містить масив JSON з об'єктами JSON всередині через параметри HTTP POST.

Формат параметра (те, що очікує сервер) - це щось на кшталт:

{""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();
            }

У останньому, крім одного рядка ( jsonRoot.put ("команда", teamArray); ) він має той самий формат, що і що надсилається в останньому рядку, але з меншим значенням \ , так що менш рази "аналізували", мабуть.

Частина мого HTTP-коду:

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

Чому це відбувається? Це Java? Будь-які ідеї, як я можу створити правильний JSON? чи будь-яка робота навколо?

Дякую багато заздалегідь!

3
@ проблема полягає в тому, що в iOS це чудово працює, але в Android я маю великі труднощі, тому проблема не повинна бути стороною на сервері ... КТО, Я тільки що додав останню частину коду - просто пара позовів catch
додано Автор noloman, джерело
@ проблема полягає в тому, що в iOS це чудово працює, але в Android я маю великі труднощі, тому проблема не повинна бути стороною на сервері ... КТО, Я тільки що додав останню частину коду - просто пара позовів catch
додано Автор noloman, джерело
так вибачте! там немає strings.xml
додано Автор noloman, джерело
так вибачте! там немає strings.xml
додано Автор noloman, джерело
@ KenY-N, але коли він приходить до методу, де я створюю HTTP-код, всі ці `` області вже є
додано Автор noloman, джерело
@ KenY-N, але коли він приходить до методу, де я створюю HTTP-код, всі ці `` області вже є
додано Автор noloman, джерело
як ви передаєте url та інші параметри
додано Автор Harish, джерело
як ви передаєте url та інші параметри
додано Автор Harish, джерело
Ви впевнені, що ваша проблема не в вашому HTTP-коді? Ви також можете показати нам це? Можливо, у вас проблема з Content Type ?
додано Автор Ken Y-N, джерело
Ви впевнені, що ваша проблема не в вашому HTTP-коді? Ви також можете показати нам це? Можливо, у вас проблема з Content Type ?
додано Автор Ken Y-N, джерело
Ось приклад використання - зауважте, що < code> requestBody.setContentType ("application/x-www-form-urlencode & zwnj; d") використовується. Я не впевнений, що таке StringEntity , але коли я розробляв простий API REST (PHP на іншому кінці), я ніколи не користувався ним ... Також зверніться до цього питання та аналогічної проблеми .
додано Автор Ken Y-N, джерело
Ось приклад використання - зауважте, що < code> requestBody.setContentType ("application/x-www-form-urlencode & zwnj; d") використовується. Я не впевнений, що таке StringEntity , але коли я розробляв простий API REST (PHP на іншому кінці), я ніколи не користувався ним ... Також зверніться до цього питання та аналогічної проблеми .
додано Автор Ken Y-N, джерело
ми можемо побачити кінець коду. Також, як ваші дані у вашому файлі strings.xml? (ви не повинні додавати жодного символу або символу). Крім того, можливо, у вас є помилки на очікуваній стороні сервера JSON: подвійна подвійна цитата невірна :)
додано Автор mithrop, джерело
ОК здорово. Чи можете ви все ще відповісти про дані у файлі strings.xml?
додано Автор mithrop, джерело
ОК здорово. Чи можете ви все ще відповісти про дані у файлі strings.xml?
додано Автор mithrop, джерело

7 Відповіді

Я дав це, і вирішив піти брудним шляхом: замінити символи вручну в такий спосіб:

json = new JSONObject(nameValuePairs.toString().replace("\"", "'"));
json = new JSONObject(json.toString().replace("\"", ""));

Це потворне, напевно небезпечне чи ризикове, але це працює ...

1
додано

Я дав це, і вирішив піти брудним шляхом: замінити символи вручну в такий спосіб:

json = new JSONObject(nameValuePairs.toString().replace("\"", "'"));
json = new JSONObject(json.toString().replace("\"", ""));

Це потворне, напевно небезпечне чи ризикове, але це працює ...

1
додано

Занадто багато кодів для цього завдання, перевірте цю бібліотеку https://github.com/kodart/Httpzoid Він використовує GSON внутрішньо та забезпечує API, який працює з об'єктами. Всі дані JSON приховані.

Http http = HttpFactory.create(context);
http.get("http://example.com/users")
    .handler(new ResponseHandler() {
        @Override
        public void success(User[] users, HttpResponse response) {
        }
    }).execute();
1
додано

Занадто багато кодів для цього завдання, перевірте цю бібліотеку https://github.com/kodart/Httpzoid Він використовує GSON внутрішньо та забезпечує API, який працює з об'єктами. Всі дані JSON приховані.

Http http = HttpFactory.create(context);
http.get("http://example.com/users")
    .handler(new ResponseHandler() {
        @Override
        public void success(User[] users, HttpResponse response) {
        }
    }).execute();
1
додано

просто порада ... я не дуже в андроїд, просто ява .. але ви можете де-та кодувати json з Base64 з обох сторін і передавати закодовану "String".

так що вам не потрібно турбуватися про будь-яку «брудну дорогу» заміни.

сподіваюся, це допоможе тобі або іншим. :)

0
додано

просто порада ... я не дуже в андроїд, просто ява .. але ви можете де-та кодувати json з Base64 з обох сторін і передавати закодовану "String".

так що вам не потрібно турбуватися про будь-яку «брудну дорогу» заміни.

сподіваюся, це допоможе тобі або іншим. :)

0
додано

просто порада ... я не дуже в андроїд, просто ява .. але ви можете де-та кодувати json з Base64 з обох сторін і передавати закодовану "String".

так що вам не потрібно турбуватися про будь-яку «брудну дорогу» заміни.

сподіваюся, це допоможе тобі або іншим. :)

0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram

ІТ КПІ - Java
ІТ КПІ - Java
436 учасників

android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.