Java转JSON串的几种方式
昨天在与对端系统调接口的时候,对端系统对我们传过去的json串老是处理不了,后来查原因是应为我们传过去的json串里有json对象数组,因为我们的json串存在表里的,取出来是作为json字符串放到json数组里的,所以带了双引号,对端认为是字符串,不是json对象所以处理不了。
[{"cardName":"bankCard1","cardCode":"888888888","cardValue":99999999},{"cardName":"bankCard2","cardCode":"999999999","cardValue":222222222}]这种是正确的json对象数组,["{"cardName":"bankCard1","cardCode":"888888888","cardValue":99999999}","{"cardName":"bankCard2","cardCode":"999999999","cardValue":222222222}"],这种是json字符串数组。
以下总结一下java转JSON串的几种方式:
1、将java对象转成json串
2、通过JSONObject生成json串
3、通过json字符串生成json串
代码通过阿里的fastjson包实现。
代码如下:
1、Person类,包含Crad的List
packagecom.doit8.test.jsontest.pojo; importjava.util.ArrayList; importjava.util.List; publicclassPerson{ privateStringusername; privateStringemail; privateStringsex; privateintage; privateListcardList=newArrayList (); publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetEmail(){ returnemail; } publicvoidsetEmail(Stringemail){ this.email=email; } publicStringgetSex(){ returnsex; } publicvoidsetSex(Stringsex){ this.sex=sex; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicList getCardList(){ returncardList; } publicvoidsetCardList(List cardList){ this.cardList=cardList; } }
2、Card类
packagecom.doit8.test.jsontest.pojo; publicclassCard{ privateStringcardName; privateStringcardCode; privateIntegercardValue; publicStringgetCardName(){ returncardName; } publicvoidsetCardName(StringcardName){ this.cardName=cardName; } publicStringgetCardCode(){ returncardCode; } publicvoidsetCardCode(StringcardCode){ this.cardCode=cardCode; } publicIntegergetCardValue(){ returncardValue; } publicvoidsetCardValue(IntegercardValue){ this.cardValue=cardValue; } }
3、JSON处理测试类
packagecom.doit8.test.jsontest; importjava.util.ArrayList; importjava.util.List; importcom.alibaba.fastjson.JSON; importcom.alibaba.fastjson.JSONArray; importcom.alibaba.fastjson.JSONObject; importcom.doit8.test.jsontest.pojo.Card; importcom.doit8.test.jsontest.pojo.Person; /** *JSON转换 * */ publicclassApp { publicstaticvoidmain(String[]args) { //1。通过对象生成JSON串,对象里包含对象数组转成JSON串。 Personperson=newPerson(); person.setUsername("xiejava"); person.setSex("man"); person.setAge(38); person.setEmail("xiejava@ishareread.com"); Cardcard1=newCard(); card1.setCardName("bankCard1"); card1.setCardCode("888888888"); card1.setCardValue(99999999); Cardcard2=newCard(); card2.setCardName("bankCard1"); card2.setCardCode("999999999"); card2.setCardValue(222222222); //对象数组 Listcards=newArrayList (); cards.add(card1); cards.add(card2); person.setCardList(cards); Stringjson=JSON.toJSON(person).toString(); System.out.println(json); //2.通过JSON对象生成JSON串 JSONObjectjObject=newJSONObject(); jObject.put("username","xiejava"); jObject.put("sex","man"); jObject.put("age",38); jObject.put("email","xiejava@ishareread.com"); //通过JSONArray包装对象数组 JSONArrayjArray=newJSONArray(); jArray.addAll(cards); jObject.put("cardList",jArray); Stringjson2=jObject.toJSONString(); System.out.println(json2); //3.通过JSON对象生成JSON串 JSONObjectjObject2=newJSONObject(); jObject2.put("username","xiejava"); jObject2.put("sex","man"); jObject2.put("age",38); jObject2.put("email","xiejava@ishareread.com"); //构造JSON字符串 StringcardjsonStr1="{\"cardName\":\"bankCard1\",\"cardCode\":\"888888888\",\"cardValue\":99999999}"; StringcardjsonStr2="{\"cardName\":\"bankCard2\",\"cardCode\":\"999999999\",\"cardValue\":222222222}"; JSON.parseObject(cardjsonStr1); JSONArrayjArray2=newJSONArray(); //将JSON字符串转成JSON对象,加入到JSONArray,[注意一定要用JSON.parseObject()方法转换成JSON对象,否则还是字符串,转成JSON串的时候会带双引号。] jArray2.add(JSON.parseObject(cardjsonStr1)); jArray2.add(JSON.parseObject(cardjsonStr2)); jObject2.put("cardList",jArray2); Stringjson3=jObject2.toJSONString(); System.out.println(json3); } }
pom.xml中引入fastjson包
com.alibaba fastjson 1.2.15
运行结果
{"cardList":[{"cardName":"bankCard1","cardCode":"888888888","cardValue":99999999},{"cardName":"bankCard1","cardCode":"999999999","cardValue":222222222}],"sex":"man","age":38,"email":"xiejava@ishareread.com","username":"xiejava"}
{"cardList":[{"cardCode":"888888888","cardName":"bankCard1","cardValue":99999999},{"cardCode":"999999999","cardName":"bankCard1","cardValue":222222222}],"sex":"man","age":38,"email":"xiejava@ishareread.com","username":"xiejava"}
{"cardList":[{"cardName":"bankCard1","cardCode":"888888888","cardValue":99999999},{"cardName":"bankCard2","cardCode":"999999999","cardValue":222222222}],"sex":"man","age":38,"email":"xiejava@ishareread.com","username":"xiejava"}