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;
}
publicListgetCardList(){
returncardList;
}
publicvoidsetCardList(ListcardList){
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"}