Как преобразовать данные json в строку в java

Я хочу преобразовать данные json в строку

import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONArray;
import org.json.JSONObject;
public static void main(String[] args) throws Exception
{

    URL url = new URL("http://192.168.1.13/test/ProductWb.php?productId=9");
    HttpURLConnection conn ;
    conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setReadTimeout(60);
    conn.setRequestProperty("Accept", "application/json");
    String json="";

    json = readUrl(conn);
           System.out.println(json);
           JSONObject jsonObject=new JSONObject(json);
           JSONArray jarray=jsonObject.getJSONArray("modeles");
           JSONObject  modele= jarray.getJSONObject("modele");
           for (int i=0;i<modele.length();i++) {
               System.out.println(modele(i).getString("id_product"));
                System.out.println(modele(i).getString("meta_title"));
                System.out.println("*********");
              }


}

покажите мне данные json, но дайте мне эту ошибку:

{"modeles":[{"modele":{"id_product":"9","id_shop":"1","id_lang":"4","description":null,"description_short":"<pre>Peugeot 208<\/pre>","info_prix":"","info_1":null,"info_2":null,"info_3":null,"info_4":null,"info_5":null,"link_rewrite":"208","meta_description":"Peugeot 208","meta_keywords":"peugeot 208","meta_title":"Peugeot 208","name":"208","available_now":"","available_later":""}}]}
Exception in thread "main" java.lang.IllegalStateException: This is not a JSON Array.
at com.google.gson.JsonElement.getAsJsonArray(JsonElement.java:106)
at com.autoreduc.services.TestProduct.main(TestProduct.java:59)

помогите мне, если у вас есть какое-либо решение. заранее спасибо


person ss3419670    schedule 07.04.2014    source источник
comment
Совершенно ясно, что This is not a JSON Array. Кроме того, где вы видите NullPointereException?   -  person Sotirios Delimanolis    schedule 07.04.2014
comment
Вам обязательно следует ознакомиться с форматом json.   -  person Sotirios Delimanolis    schedule 07.04.2014
comment
Как вы обычно читаете трассировку стека исключений?   -  person Sotirios Delimanolis    schedule 07.04.2014
comment
Он имеет в виду, что вы указываете в своем вопросе, что у вас есть NullPointereException (sic), когда в вашей трассировке стека нет упоминания об этом исключении. Это IllegalStateException   -  person Rob Baillie    schedule 07.04.2014


Ответы (4)


В вашем коде вы читаете данные json из URL-адреса. Я просто скопировал ваши данные, вставил их в файл и прочитал файл, поскольку ваш URL-адрес не работал. Здесь шаг за шагом я показал, как анализировать ваш объект json и содержимое внутри него. Для этого я использовал java-json-schema.jar.

    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Iterator;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;
    public class Tets {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JSONParser parser = new JSONParser();
           try{
          /*  URL url = new URL("http://192.168.1.13/test/ProductWb.php?productId=9");
            HttpURLConnection conn ;
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(60);
            conn.setRequestProperty("Accept", "application/json");*/
            String json="";

            Object obj = parser.parse(new FileReader("C:\\XXX\\XX\\src\\javapackage\\t.json"));

            JSONObject jsonObject = (JSONObject) obj;
            System.out.println(jsonObject.toJSONString());  //modeles object
            JSONArray name = (JSONArray) jsonObject.get("modeles");
            System.out.println(name.toJSONString());//array inside modeles array


            for (Object o : name)
              {
                JSONObject person = (JSONObject) o;
                 JSONObject person1 = (JSONObject)person.get("modele");
                              System.out.println(person.get("modele"));//modele object
                              System.out.println(person1.get("id_lang"));//modele attribute
              } 



        }catch(Exception e){e.printStackTrace();}

        }
    }

Выход

Ваш Json-объект

{"modeles":[{"modele":{"id_lang":"4","info_5":null,"info_4":null,"link_rewrite":"208","meta_keywords":"peugeot 208","info_3":null,"info_2":null,"info_1":null,"available_now":"","meta_description":"Peugeot 208","id_product":"9","description_short":"<pre>Peugeot 208<\/pre>","description":null,"name":"208","info_prix":"","meta_title":"Peugeot 208","available_later":"","id_shop":"1"}}]}

Ваш массив Json, содержащийся в объекте json

[{"modele":{"id_lang":"4","info_5":null,"info_4":null,"link_rewrite":"208","meta_keywords":"peugeot 208","info_3":null,"info_2":null,"info_1":null,"available_now":"","meta_description":"Peugeot 208","id_product":"9","description_short":"<pre>Peugeot 208<\/pre>","description":null,"name":"208","info_prix":"","meta_title":"Peugeot 208","available_later":"","id_shop":"1"}}]

Ваш объект Json внутри массива

{"id_lang":"4","info_5":null,"info_4":null,"link_rewrite":"208","meta_keywords":"peugeot 208","info_3":null,"info_2":null,"info_1":null,"available_now":"","meta_description":"Peugeot 208","id_product":"9","description_short":"<pre>Peugeot 208<\/pre>","description":null,"name":"208","info_prix":"","meta_title":"Peugeot 208","available_later":"","id_shop":"1"}

Значение атрибута id_lang вашего объекта Json = 4

4

введите здесь описание изображения

person codefreaK    schedule 07.04.2014
comment
я делаю ваше предложение, но оно дает мне это исключение --› Может выполнять итерацию только по массиву или экземпляру java.lang.Iterable, в этой --› части кода: (Объект o: имя) - person ss3419670; 08.04.2014
comment
вы скопировали весь мой код и вставили его или вы написали его с нуля на основе моего предложения - person codefreaK; 08.04.2014

Ваш JSON не является массивом.

Это объект JSON с одним свойством: modeles, значением которого является массив.

Разберите корень как JsonObject.

person Mena    schedule 07.04.2014
comment
Вы должны любить конструкцию библиотеки для интерпретации формата, который требует от вас понимания формата и знания того, что у вас есть, прежде чем интерпретировать его! - person Rob Baillie; 07.04.2014

Вы можете использовать ObjectMapper для преобразования объектов в строку json:

ObjectMapper mapper = new ObjectMapper();
try {
  String json = mapper.writeValueAsString(cat);
  System.out.println("ResultingJSONstring = " + json);
  //System.out.println(json);
} catch (JsonProcessingException e) {
   e.printStackTrace();
}
person suthar_arun    schedule 24.02.2021

{->представляет JSONObject, а [->представляет JSONArray, сначала получите jsonObject, а затем получите в нем массив.

Я попытался с пакетом jsonObject импортировать банку

 JSONObject jsonObject=new JSONObject(yourstring);
    JSONArray jarray=jsonObject.getJSONArray("modeles");
 JSONObject  modele= jarray.getJSONObject("modele");
   for (int i=0;i<modele.length();i++) {
       System.out.println(modele(i).getString("id_product"));
        System.out.println(modele(i).getString("meta_title"));
        System.out.println("*********");
      }
person Nambi    schedule 07.04.2014
comment
что такое JSONObject, потому что он не принят затмением? - person ss3419670; 07.04.2014
comment
@ ss3419670 Пожалуйста, укажите соответствующие import в своем вопросе. - person ; 07.04.2014
comment
я делаю это, но это дает мне добавить приведение к jarray.get (i)? - person ss3419670; 07.04.2014
comment
да, я смотрю, я нашел эту ошибку с вашим последним ответом - person ss3419670; 07.04.2014
comment
@ ss3419670 извините, я не узнал ваш json, пожалуйста, посмотрите мое последнее редактирование - person Nambi; 07.04.2014
comment
да, я делаю это и даю мне изменить этот getJSONObject(modele); to optJSONOBject, а также дать мне создать метод jsonObject(i)? извините за расстройство - person ss3419670; 07.04.2014
comment
измените модель (i) вместо jsonObject (i) не используйте optJSONBject для получения строки, например, ключ: значение в поле объекта - person Nambi; 07.04.2014
comment
я меняю его, но то же самое он дает для создания модели метода - person ss3419670; 07.04.2014