JSON/GSON with changing keys into Java -



JSON/GSON with changing keys into Java -

i'm trying process json java object using beans , gson. however, keys in json code using can alter on time, based on traded. can manually create bean file includes each currency code, in end, can different, , programme broken.

here code:

from main class:

public void updatedata() { info data; string s = null; seek { s = datagetter.getjson("http://bitcoincharts.com/t/weighted_prices.json"); } grab (exception e) { // todo auto-generated grab block e.printstacktrace(); } s = s.replaceall("7d", "week"); s = s.replaceall("30d", "month"); s = s.replaceall("24h", "day"); s = s.tolowercase(); info = new gson().fromjson(s, data.class); }

data.java:

package tehsusenoh.bittick.get; import java.util.arraylist; import java.util.list; public class info { public enum currency { usd, aud, rub, gau, bgn, cny, sll, inr, gbp, pln, sar, eur, clp, cad } private currencydata usd; private currencydata aud; private currencydata rub; private currencydata gau; private currencydata bgn; private currencydata cny; private currencydata sll; private currencydata inr; private currencydata gbp; private currencydata pln; private currencydata sar; private currencydata eur; private currencydata clp; private currencydata cad; public list<currencydata> getdata() { list<currencydata> d = new arraylist<currencydata> (); d.add(usd); d.add(aud); d.add(rub); d.add(gau); d.add(bgn); d.add(cny); d.add(sll); d.add(inr); d.add(gbp); d.add(pln); d.add(sar); d.add(eur); d.add(clp); d.add(cad); homecoming d; } public currencydata get(currency c) { switch (c) { case usd: { homecoming usd; } case aud: { homecoming aud; } case rub: { homecoming rub; } case gau: { homecoming gau; } case bgn: { homecoming bgn; } case cny: { homecoming sll; } case inr: { homecoming inr; } case gbp: { homecoming gbp; } case pln: { homecoming pln; } case sar: { homecoming sar; } case eur: { homecoming eur; } case clp: { homecoming clp; } case cad: { homecoming cad; } default: { homecoming null; } } } public void addcodes() { usd.setcode("usd"); aud.setcode("aud"); rub.setcode("rub"); gau.setcode("gau"); bgn.setcode("bgn"); cny.setcode("cny"); sll.setcode("sll"); inr.setcode("inr"); gbp.setcode("gbp"); pln.setcode("pln"); sar.setcode("sar"); eur.setcode("eur"); clp.setcode("clp"); cad.setcode("cad"); } public string tostring() { homecoming "" + getdata(); } }

and finally, currencydata.java:

package tehsusenoh.bittick.get; public class currencydata { private double week; private double month; private double day; private string code; public currencydata() {} public double getweek() { homecoming week; } public double getmonth() { homecoming month; } public double getday() { homecoming day; } public string getcode() { homecoming code; } public void setweek(double d) { week = d; } public void setmonth(double d) { month = d; } public void setday(double d) { day = d; } public void setcode(string acode) { code = acode; } public string tostring() { homecoming code + ":: week:" + week + " month:" + month + " day:" + day; } }

since nice person generated json chose utilize json object hold collection of things, instead of using json array, jim's suggestion utilize java map natural fit.

with gson, here's solution like.

import java.io.filereader; import java.lang.reflect.type; import java.math.bigdecimal; import java.util.map; import com.google.gson.gson; import com.google.gson.annotations.serializedname; import com.google.gson.reflect.typetoken; public class foo { public static void main(string[] args) throws exception { gson gson = new gson(); type currencymaptype = new typetoken<map<string, currency>>() {}.gettype(); map<string, currency> currencymap = gson.fromjson(new filereader("input.json"), currencymaptype); system.out.println(currencymap); } } class currency { @serializedname("7d") bigdecimal _7d; @serializedname("30d") bigdecimal _30d; @serializedname("24h") bigdecimal _24h; @override public string tostring() { homecoming string.format("{7d:%s, 30d:%s, 24h:%s}", _7d, _30d, _24h); } }

the next update generates list of currencies currency info in deserialized map.

import java.io.filereader; import java.lang.reflect.type; import java.math.bigdecimal; import java.util.arraylist; import java.util.list; import java.util.map; import java.util.map.entry; import com.google.gson.gson; import com.google.gson.annotations.serializedname; import com.google.gson.reflect.typetoken; public class foo { public static void main(string[] args) throws exception { gson gson = new gson(); type currencydatamaptype = new typetoken<map<string, currencydata>>() {}.gettype(); map<string, currencydata> currencydatamap = gson.fromjson(new filereader("input.json"), currencydatamaptype); list<currency> currencies = fromdatamap(currencydatamap); system.out.println(currencies); } static list<currency> fromdatamap(map<string, currencydata> currencydatamap) { list<currency> currencies = new arraylist<currency>(currencydatamap.size()); (entry<string, currencydata> entry : currencydatamap.entryset()) { string code = entry.getkey(); currencies.add(new currency(code, currencydatamap.get(code))); } homecoming currencies; } } class currency { string code; currencydata data; currency(string code, currencydata data) { this.code = code; this.data = data; } @override public string tostring() { homecoming string.format("{code:%s, 7d:%s, 30d:%s, 24h:%s}", code, data._7d, data._30d, data._24h); } } class currencydata { @serializedname("7d") bigdecimal _7d; @serializedname("30d") bigdecimal _30d; @serializedname("24h") bigdecimal _24h; }

java json gson

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -