2013-10-05 3 views
1

JSon выглядит следующим образом:как десериализации неизвестной JSON имени массива с помощью gson

"hour_totals": { 
     "382423": { 
     "imp": 126, 
     "clk": 1, 
     "spend": "$0.03", 
     "conv": 0, 
     "cpm": "$0.22", 
     "cpc": "$0.03", 
     "ctr": "0.79%", 
     "cpa": "$Inf" 
     }, 
     "382424": { 
     "imp": 209, 
     "clk": 1, 
     "spend": "$0.05", 
     "conv": 0, 
     "cpm": "$0.23", 
     "cpc": "$0.05", 
     "ctr": "0.48%", 
     "cpa": "$Inf" 
     }} 

Я прочитал более 20 ответов, но не смогли найти, как десериализации такой структуры, пожалуйста, помогите, на каком бы классе выглядят так, поскольку час не является фиксированной строкой.

+0

Я не думаю, что JSON в библиотеку объектов Java будет работать с JSON как это автоматически. Кажется, что вы хотите сохранить часовые узлы как карту , но для этого я думаю, что вам просто нужно будет перебирать каждый тип узла, как люди, которые читали XML –

+0

@JasonSperske спасибо , Я просто подумал, что это сработало. FYI 'google-gson' смог обработать этот тип json. –

+0

@coding вы должны добавить свой последний код в качестве ответа на свой собственный вопрос, чтобы люди могли его проголосовать. –

ответ

1

Чтобы разобрать этот JSON с Gson, вам нужно два шага.

  1. Определить эти классы:

    public class Total { 
    
        Map<String, HourData> hour_totals; 
    
        @Override 
        public String toString() { 
         return "Total [hour_totals=" + hour_totals + "]"; 
        } 
    
    } 
    

    где HourData является

    public class HourData { 
    
        Integer imp; 
        Integer clk; 
        String spend; 
        Integer conv; 
        String cpm; 
        String cpc; 
        String cpa; 
    
        @Override 
        public String toString() { 
         return "HourData [imp=" + imp + ", clk=" + clk + ", spend=" + spend 
          + ", conv=" + conv + ", cpm=" + cpm + ", cpc=" + cpc + ", cpa=" 
          + cpa + "]"; 
        } 
    
    } 
    
  2. Hack чуток свой "JSon строку", так как это не является допустимым Json (подробнее ниже). Вам просто нужно добавить фигурные скобки, как этот код:

    public class Q19201300 { 
    
        public static void main(String[] args) { 
         String json = "\"hour_totals\": { " 
           + " \"382423\": {     " 
           + " \"imp\": 126,     " 
           + " \"clk\": 1,     " 
           + " \"spend\": \"$0.03\",   " 
           + " \"conv\": 0,     " 
           + " \"cpm\": \"$0.22\",   " 
           + " \"cpc\": \"$0.03\",   " 
           + " \"ctr\": \"0.79%\",   " 
           + " \"cpa\": \"$Inf\"    " 
           + "},        " 
           + "\"382424\": {     " 
           + " \"imp\": 209,     " 
           + " \"clk\": 1,     " 
           + " \"spend\": \"$0.05\",   " 
           + " \"conv\": 0,     " 
           + " \"cpm\": \"$0.23\",   " 
           + " \"cpc\": \"$0.05\",   " 
           + " \"ctr\": \"0.48%\",   " 
           + " \"cpa\": \"$Inf\"    " 
           + "}}        "; 
    
         Total t = new Gson().fromJson("{" + json + "}", Total.class); 
    
         System.out.println(t); 
    
        } 
    } 
    

Это даст вам:

Всего [hour_totals = {382423 = HourData [имп = 126, CLK = 1, проводят = $ 0.03, conv = 0, cpm = $ 0.22, cpc = $ 0.03, cpa = $ Inf], 382424 = HourData [imp = 209, clk = 1, потратить = $ 0,05, conv = 0, cpm = $ 0.23, cpc = $ 0,05, cpa = $ Inf]}]

О Вашей строка. Из JSON официальной грамматики (http://www.ietf.org/rfc/rfc4627.txt):

  1. JSON грамматика

    JSON текст представляет собой последовательность лексем. Набор токенов включает в себя шесть структурных символов, строк, цифр и три буквальных имени .

    Текст JSON представляет собой сериализованный объект или массив.

Смежные вопросы