Как опубликовать http два разных объекта json в одном объекте?

#android #json #rest #http-post

#Android #json #остальное #http-post

Вопрос:

 @Override
protected Void doInBackground(Void... arg0) {
    HttpClient httpClient = new DefaultHttpClient();
    // Creating HTTP Post
    HttpPost httpPost = new HttpPost("www.somewebsite.com");
    httpPost.setHeader("Content-type", "application/json");

    try {
        httpPost.setEntity(new StringEntity(getJSONString(), "UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    // Making HTTP Request
    try {
        HttpResponse response = httpClient.execute(httpPost);
        System.out.println(response.getStatusLine().getStatusCode());
    } catch (ClientProtocolException e) {
        // writing exception to log
        e.printStackTrace();
    } catch (IOException e) {
        // writing exception to log
        e.printStackTrace();

    }

}
  

Для меня это работает нормально. Однако я хочу отправить другие jsonobject бизнес-данные на сервер. Как я могу это сделать?

Ответ №1:

Просто объедините 2 JSONObjects в 1.

 {   
 "json_1": {
    "a": "1"   
 },   
 "json_2": {
    "b": "2"   
 } 
}
  

Комментарии:

1. Будет ли сервер понимать строки «json_1» и «json_2»? Здесь первый jsonobject предназначен для аутентификации сервера (содержит идентификатор и regn ключ), а второй jsonobject предназначен для отправки бизнес-данных.

2. Об этом должен позаботиться ваш сервер, что-то вроде: getTheWholeJSONObject jObj; 1_jsonobject = jObj.getJSONObject(«json_1»); 2_jsonobject = jObj.getJSONObject(«json_2»);

3. Да, понял! Но у меня нет контроля над сервером. В любом случае я создал два httpPosts, и это сработало для меня.

Ответ №2:

Вы можете отправить только один объект, поэтому вашу функцию getJSONString() необходимо будет обновить, чтобы вернуть оба объекта в виде одной строки.

Возможно, вы захотите рассмотреть возможность отправки правильного списка JSON.

 [
    { /* object one */ },
    { /* object two */ }
]
  

Я думаю, что это гораздо предпочтительнее, чем «комбинированный объект»

 {
    "object one" : { /* object one */ },
    "object two" : { /* object two */ }
}
  

Использование объединенного объекта затрудняет синтаксический анализ, так как вам нужно явно извлекать каждый вложенный объект из основного объекта. С помощью массива вы можете просто перебирать каждый элемент списка, что означает, что добавить больше в список так же просто, как добавить больше в список. Ваше точное использование может означать, что объединенный объект лучше, например, если вам нужно знать точный порядок, в котором должны обрабатываться подобъекты; Списки JSON неупорядочены, как вы видите.

Комментарии:

1. Что такое «объект один» и «объект два» здесь? Могу ли я назвать что-нибудь, чтобы сервер понял?

2. да, это json. Это ключи, которые вы будете использовать для возврата соответствующих объектов. Я предлагаю вам быстро взглянуть на json.org .

Ответ №3:

Просто! Объедините оба json с помощью разделителя, а затем разделите с помощью разделителя на сервере.

Или создайте новый объект json с обоими json и отправьте общий объект json на сервер.

Nithin