2015-11-02 68 views
1

我試圖讀取Java中的JSON文件(即時消息從JSON開始)。在Java中讀取JSON數組

的JSON文件:

[ 
    { 
    "idProducto":1, 
    "Nombre":"Coca Cola", 
    "Precio":0.9, 
    "Cantidad":19 
    }, 
    { 
    "idProducto":2, 
    "Nombre":"Coca Cola Zero", 
    "Precio":0.6, 
    "Cantidad":19 
    }, 
[....] 
] 

我試過如下:

ArrayList<Dispensador> Productos = new ArrayList<Dispensador>(); 

    FileReader reader = new FileReader(new File("productos.json")); 
    JSONParser jsonParser = new JSONParser(); 
    JSONArray jsonArray = (JSONArray) jsonParser.parse(reader); 
    JSONObject object = (JSONObject) jsonArray.get(0); 
    Long idProducto = (Long) object.get("idProducto"); 
    JSONArray nombres = object.getJSONArray("idProducto"); 

    Iterator i = jsonArray.iterator(); 

    while (i.hasNext()) { 
     String nombre = (String) object.get("Nombre"); 
     Double precio = (Double) object.get("Precio"); 
     BigDecimal precioB = new BigDecimal(precio); 
     Long cantidad = (Long) object.get("Cantidad"); 
     int cantidadB = toIntExact(cantidad); 
     System.out.println(nombre); 
     Productos.add(new Dispensador(nombre, precioB, cantidadB)); 
    } 

但進入bucle循環。我也嘗試過一次,但沒有運氣。

謝謝!

回答

1

您可以使用GSON

您可以使用Maven或者jar文件:http://mvnrepository.com/artifact/com.google.code.gson/gson

package com.test; 

import java.lang.reflect.Type; 
import java.util.ArrayList; 
import java.util.List; 

import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 

public class AppJsonTest { 

    public static void main(String[] args) { 
     List<DataObject> objList = new ArrayList<DataObject>(); 
     objList.add(new DataObject(1, "Coca Cola", 0.9, 19)); 
     objList.add(new DataObject(2, "Coca Cola Zero", 0.6, 19)); 

     // Convert the object to a JSON string 
     String json = new Gson().toJson(objList); 
     System.out.println(json); 

     // Now convert the JSON string back to your java object 
     Type type = new TypeToken<List<DataObject>>() { 
     }.getType(); 
     List<DataObject> inpList = new Gson().fromJson(json, type); 
     for (int i = 0; i < inpList.size(); i++) { 
      DataObject x = inpList.get(i); 
      System.out.println(x.toString()); 
     } 
    } 
} 

class DataObject { 
    int idProducto; 
    String Nombre; 
    Double Precio; 
    int Cantidad; 

    public DataObject(int idProducto, String nombre, Double precio, int cantidad) { 
     this.idProducto = idProducto; 
     Nombre = nombre; 
     Precio = precio; 
     Cantidad = cantidad; 
    } 

    public int getIdProducto() { 
     return idProducto; 
    } 

    public void setIdProducto(int idProducto) { 
     this.idProducto = idProducto; 
    } 

    public String getNombre() { 
     return Nombre; 
    } 

    public void setNombre(String nombre) { 
     Nombre = nombre; 
    } 

    public Double getPrecio() { 
     return Precio; 
    } 

    public void setPrecio(Double precio) { 
     Precio = precio; 
    } 

    public int getCantidad() { 
     return Cantidad; 
    } 

    public void setCantidad(int cantidad) { 
     Cantidad = cantidad; 
    } 

    @Override 
    public String toString() { 
     return "DataObject [idProducto=" + idProducto + ", Nombre=" + Nombre + ", Precio=" + Precio + ", Cantidad=" + Cantidad + "]"; 
    } 

} 
+0

謝謝!它的作品完美:) –

1

使用GSON庫讀寫JSON:

try { 
      JsonReader reader = new JsonReader(new FileReader("json_file_path.json")); 

      reader.beginArray(); 
      while (reader.hasNext()) { 

       reader.beginObject(); 
       while (reader.hasNext()) { 

        String name = reader.nextName(); 

        if (name.equals("idProducto")) { 

         System.out.println(reader.nextInt()); 

        } else if (name.equals("Nombre")) { 

         System.out.println(reader.nextString()); 

        } else if (name.equals("Precio")) { 

         System.out.println(reader.nextDouble()); 

        } else if (name.equals("Cantidad")) { 
         System.out.println(reader.nextInt()); 
        } else { 
         reader.skipValue(); 
        } 
       } 
       reader.endObject(); 
      } 
      reader.endArray(); 

      reader.close(); 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

下載http://www.java2s.com/Code/JarDownload/gson/gson-2.2.2.jar.zip

+0

謝謝!完善! –

1

您正在測試的迭代器是否具有i.hasNext()下一個元素。但是你不會消耗(或檢索)i.next()中的下一個元素,它通常在循環塊的第一個語句中。因此i.hasNext()將永遠返回true。

編輯:您可能想要設置objecti.next(),因爲在您的代碼段中,它始終保持在您在循環之前分配的0元素處。

+0

謝謝!我要與Madushan的答案一起,但感謝你的時間:) –

0

有許多開放源碼庫,目前解析JSON反對或只是讀寫json值。如果你想讀取和寫入JSON,那麼你可以使用org.json庫。

使用org.json庫來解析它,創造的JSONObject: -

JSONObject jsonObj = new JSONObject(<jsonStr>); 

現在,使用這個對象來獲取你的價值觀: -

String id = jsonObj.getString("pageInfo"); 

你可以在這裏看到完整的示例: -

How to parse Json in java

如果你想你的JSON解析特定POJO,然後使用該POJO得到的值,然後用傑克遜 - 數據綁定庫,這將解析您的JSON到POJO類: -

ObjectMapper mapper = new ObjectMapper(); 
book = mapper.readValue(json, Book.class); 

你可以看到完整的示例在這裏,How to parse json in java