Передача файла JSON в Hashtable<String, String>

Я передал файл JSON в Hashtable<String, String> params:

{Date=2015-05-01, Data1={"Id":"1","Seating":0,"IdServiceCode":"8"}}

Это просто для чтения данных в строки (String st = params.get("Date")). Но я хочу сохранить Date как GregorianCalendar и Data1 как Hashtable. Как я могу это сделать?

public double getEstimation(Hashtable<String, String> params) 
{
  GregorianCalendar cal = params.get("Date");
  Hashtable<String, String> data = params.get("Data1");
  //...
}

4 ответа

Решение

Вы должны проанализировать вашу строку даты в объект даты и создать таблицу на основе вашего JSON.

Учитывая, что вы используете JSON.org, это должно сделать:

public double getEstimation(Hashtable<String, String> params) {
    // not sure if date is in this format
    SimpleDateFormat sdt = new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdt.parse(params.get("Date"));
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(date);

    HashTable<String, String> data = jsonStringToHT(params.get("Data1"));
    //...
}

private HashTable<String, String> jsonStringToHT(String json){
    HashTable<String, String> ht = new HashTable<String, String>();
    JSONObject jObject = new JSONObject(t);
    Iterator<?> keys = jObject.keys();

    while( keys.hasNext() ){
        String key = (String)keys.next();
        String value = jObject.getString(key); 
        ht.put(key, value);

    }
    return ht;
}

Во-первых, используйте эту библиотеку

Затем проанализируйте эту строку JSONObject job =new JSONObject("yourJsonString");

Примечание:(yourJsonString) Это строка, а не ваша хэш-таблица

String date=job.getString("date"); // Это даст вам дату в строковом формате

Теперь используйте API GregorianCalendar для преобразования вашей строки в Date.

Для JSON (с использованием библиотеки org.json):

String str = "{ \"Id\": \"1\", \"Seating\": \"0\", \"IdServiceCode\": \"8\" }";
JSONObject obj = new JSONObject(str);
Hashtable<String, String> data = new Hashtable<String, String>();
data.put ("Id",obj.getString("Id"));
data.put ("Seating",obj.getString("Seating"));
data.put ("IdServiceCode",obj.getString("IdServiceCode"));

Для даты:

DateFormat df = new SimpleDateFormat("yyyy-MM-DD");
Date date = df.parse("2015-05-01");
Calendar cal = new GregorianCalendar();
cal.setTime(date);

Если вы хотите иметь оба Date а также Hashtable как ценности в вашем Hashtable то должен иметь тип Hashtable<String, Object>, Однако проще использовать объект библиотеки, такой как JSONObject, Вы можете построить его из JSON, используя конструктор JSONObject(java.lang.String source), У него есть такие методы, как getJSONObject который вернет другое JSONOBject (это своего рода таблица) для вашего Data1 ключ. Он не имеет встроенной функции получения дат, поэтому вам придется getString и напиши конверсию сам

Другие вопросы по тегам