Анализ файла JSON в базе данных в веб-программе Java - PullRequest
0 голосов
/ 12 декабря 2011

У меня большой JSON-файл, как показано ниже.

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


    }
    }

, но он дает мне только один объект, такой как только первый идентификатор, а следующий идентификатор недоступен в цикле for.

1 Ответ

0 голосов
/ 12 декабря 2011

При обработке данных в формате JSON первое, что я обычно делаю, это не обработка JSON.Я часто предпочитаю заполнить старые добрые POJO, а затем приступить к любой бизнес-логике.Чтобы отобразить JSON в структуру данных Java, я предпочитаю использовать 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);
  }
}
...