2011-12-12 46 views
0

我有一個很大的JSON文件,如下所示。JSON文件解析到Java Web程序中的數據庫

[{"id":0,"name":"Mrs. Tess Goyette","priceRange":{"min":86,"max":87},"requirements":["close to transport","internet","bath","gym"]},.. 

像智者一樣有999這樣的項目。我想將這些數據發送到MySQL數據庫。還有 與它做一些交易。還有一個這樣的文件,它擁有40個酒店名稱和數據,稱爲住宿。

我無法用java解析這個文件。任何人都可以幫忙嗎?我試圖創建一個JSON對象和數組,但失敗了。 enter code here

任何幫助表示讚賞。

是的,我確定我試過編碼這樣的東西。

public static void main(String[] args) { 


     JSONParser parser = new JSONParser(); 
     try { 

         JSONParser parser = new JSONParser(); 

      InputStream is = hoteldemo.class.getResourceAsStream("accommodation.json"); 


      String jsonTxt = IOUtils.toString(is); 
      JSON json = JSONSerializer.toJSON(jsonTxt); 

      JSONObject json1 = (JSONObject)JSONSerializer.toJSON(jsonTxt); 
      JSONObject json2= json1.getJSONObject("menu"); 

       double id = json2.getDouble("id"); 
      String name = json2.getString("name"); 
      int price=json2.getInt("price"); 

      JSONArray jarray=json2.getJSONArray("attributes"); 
      //JSONArray jarray1=json1.getJSONArray("capacity"); 

      int a= json2.size(); 
      for(int i=0;i<json2.size();i++) 
      { 
      System.out.println("The id is "+ json2.getDouble("id")); 
      System.out.println("The name is "+ json2.getString("name")); 
      System.out.println("The price is "+ json2.getInt("price")); 
     System.out.println("the size of object is" + a); 

      } 
     /* for(int i=0;i<jarray.size();i++) 
      { 
       System.out.println("This is ameneities id is " + jarray.getString(i)); 
      } 
      for(int j=0;j<jarray1.size();j++) 
      { 
       System.out.println("This is ameneities id is " + jarray1.getString(j)); 

      }*/ 


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


    } 
    } 

但它給我只有一個對象,只有第一個id和下一個id不能在for循環訪問。

+0

少即是多... – nfechner

+2

請告訴我們您的代碼,並告訴我們,[你已經嘗試過(http://mattgemmell.com/2008/12/08/what-have-you-tried /)。 – nfechner

+0

我做了這樣的事情。 –

回答

0

當處理JSON格式的數據時,我通常喜歡做的第一件事就是不處理JSON。我經常喜歡填充一些優秀的舊POJO,然後繼續處理任何業務邏輯。要將JSON映射到Java數據結構,我的首選是使用Jackson。以下是使用Jackson從原始問題反序列化示例JSON的示例。

import java.io.File; 
import java.util.List; 

import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; 
import org.codehaus.jackson.annotate.JsonMethod; 
import org.codehaus.jackson.map.ObjectMapper; 

public class JacksonFoo 
{ 
    public static void main(String[] args) throws Exception 
    { 
    ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY); 

    List<AccomodationRequest> requests = mapper.readValue(new File("accommodation.json"), mapper.getTypeFactory().constructCollectionType(List.class, AccomodationRequest.class)); 
    System.out.println(requests); 

    for (AccomodationRequest request : requests) 
    { 
     System.out.println("----"); 
     System.out.println("id is " + request.id); 
     System.out.println("name is " + request.name); 
    } 
    } 
} 

class AccomodationRequest 
{ 
    int id; 
    String name; 
    PriceRange priceRange; 
    List<String> requirements; 

    @Override 
    public String toString() 
    { 
    return String.format("AccomodationRequest: id=%d, name=%s, priceRange=%s, requirements=%s", id, name, priceRange, requirements); 
    } 
} 

class PriceRange 
{ 
    int min; 
    int max; 

    @Override 
    public String toString() 
    { 
    return String.format("PriceRange: min=%d, max=%d", min, max); 
    } 
} 
+0

你用於objectmapper類的庫。 eclipse沒有檢測到該類爲1.4.2 jar文件 –

+0

Jackson。它與上面相關。 http://jackson.codehaus.org –

+0

非常感謝答案。 –