簡體   English   中英

如何將JSON解析為ActiveJDBC模型?

[英]How to parse JSON into an ActiveJDBC Model?

我正在使用ActiveJDBC進行寵物項目。 我似乎找不到將JSON數組轉換為List或Java數組的方法。 下面的代碼確實采用JSON數組並創建一個列表,但未填充模型。 意思是,當我希望它保持一個值時, number.get("winning_numbers")null

由於沒有錯誤,我無法找到填充該模型的方法,最終目標是將其持久化到數據庫中。 有任何想法嗎?

我知道ActiveJDBC需要儀器,我確保發生這種情況,因此我懷疑這是問題所在。

# schema
create table draws (
  draw_date TIMESTAMP not null,
  winning_numbers varchar(20) not null,
  multiplier int not null,
  primary key (draw_date)
)

違規行在第二個縮進if語句內。 這仍然是原型代碼,所以道歉,因為我還沒有格式化代碼美化。

# where the problem resides
public class PowerballLotteryService {
    private static final Logger log = LoggerFactory.getLogger(PowerballLotteryService.class);
    private static String LOTTO_URL = "http://data.ny.gov/resource/d6yy-54nr.json";

    public static List<LottoNumbers> getLatest() {
        List<LottoNumbers> latestNumbers = Lists.newArrayList();

        // rest client
        String result = null;
        List<Draw> numbersList = null;

        try {
            Client client = Client.create();
            WebResource webResource2 = client.resource(LOTTO_URL);
            ClientResponse response2 = webResource2.accept("application/json").get(ClientResponse.class);
            if (response2.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + response2.getStatus());
            }

            result = response2.getEntity(String.class);

            if (result != null) {
                Gson gson = new GsonBuilder().create();
                numbersList = new Gson().fromJson(result, new TypeToken<List<Draw>>(){}.getType());

                if (numbersList != null) {
                    for(Draw number : numbersList) {
                        // This is always null for some reason: number.get("winning_numbers")
                        String winningNumber = number.get("winning_numbers").toString();
                        if (winningNumber != null) {
                            number.saveIt();
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return latestNumbers;
    }
}

編輯模型 - 簡單地作為ActiveJDBC文檔中的示例

public class Draw extends Model {
}

您的模型沒有屬性方法,因此Gson不設置任何值(我假設它使用標准的JavaBeans屬性名稱約定)。 這樣的事情應該有效:

public class Draw extends Model {
   public void setWinningNumbers(String n){ set("winning_numbers", n);}
}

由於Gson的工作原理,你可能想嘗試使用方法名稱: set_winning_numberssetWinning_NumberssetWinning_numbers - 我不確定。 但是,目前你沒有Gson匹配的方法。

替代解決方案:將數據導入地圖:

List<Map> numbersList = new Gson().fromJson(result, new TypeToken<List<Map>>(){}.getType());

之后:

List<Draw> draws = new ArrayList<>();
for(Map m: numbersList){
    Draw d = new Draw();
    d.fromMap(m);
    draws.add(d);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM