如果您想了解Java转JSON串的几种方式的相关知识,那么本文是一篇不可错过的文章,我们将对java转json进行全面详尽的解释,并且为您提供关于Gson中@JsonAdater注解的几种方式总结、j
如果您想了解Java转JSON串的几种方式的相关知识,那么本文是一篇不可错过的文章,我们将对java 转 json进行全面详尽的解释,并且为您提供关于Gson中@JsonAdater注解的几种方式总结、jackson java转json hibernate懒加载造成的无限递归问题、Java - 格式化输出JSON字符串的两种方式、java ajax返回 Json 的 几种方式的有价值的信息。
本文目录一览:- Java转JSON串的几种方式(java 转 json)
- Gson中@JsonAdater注解的几种方式总结
- jackson java转json hibernate懒加载造成的无限递归问题
- Java - 格式化输出JSON字符串的两种方式
- java ajax返回 Json 的 几种方式
Java转JSON串的几种方式(java 转 json)
昨天在与对端系统调接口的时候,对端系统对我们传过去的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
package com.doit8.test.jsontest.pojo; import java.util.ArrayList; import java.util.List; public class Person { private String username; private String email; private String sex; private int age; private List cardList=new ArrayList(); public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List getCardList() { return cardList; } public void setCardList(List cardList) { this.cardList = cardList; } }
2、Card类
package com.doit8.test.jsontest.pojo; public class Card { private String cardName; private String cardCode; private Integer cardValue; public String getCardName() { return cardName; } public void setCardName(String cardName) { this.cardName = cardName; } public String getCardCode() { return cardCode; } public void setCardCode(String cardCode) { this.cardCode = cardCode; } public Integer getCardValue() { return cardValue; } public void setCardValue(Integer cardValue) { this.cardValue = cardValue; } }
3、JSON处理测试类
package com.doit8.test.jsontest; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doit8.test.jsontest.pojo.Card; import com.doit8.test.jsontest.pojo.Person; /** * JSON转换 * */ public class App { public static void main( String[] args ) { //1。通过对象生成JSON串,对象里包含对象数组转成JSON串。 Person person=new Person(); person.setUsername("xiejava"); person.setSex("man"); person.setAge(38); person.setEmail("xiejava@ishareread.com"); Card card1=new Card(); card1.setCardName("bankCard1"); card1.setCardCode("888888888"); card1.setCardValue(99999999); Card card2=new Card(); card2.setCardName("bankCard1"); card2.setCardCode("999999999"); card2.setCardValue(222222222); //对象数组 List cards=new ArrayList(); cards.add(card1); cards.add(card2); person.setCardList(cards); String json = JSON.toJSON(person).toString(); System.out.println(json); //2.通过JSON对象生成JSON串 JSONObject jObject=new JSONObject(); jObject.put("username", "xiejava"); jObject.put("sex", "man"); jObject.put("age", 38); jObject.put("email", "xiejava@ishareread.com"); //通过JSONArray包装对象数组 JSONArray jArray=new JSONArray(); jArray.addAll(cards); jObject.put("cardList", jArray); String json2=jObject.toJSONString(); System.out.println(json2); //3.通过JSON对象生成JSON串 JSONObject jObject2=new JSONObject(); jObject2.put("username", "xiejava"); jObject2.put("sex", "man"); jObject2.put("age", 38); jObject2.put("email", "xiejava@ishareread.com"); //构造JSON字符串 String cardjsonStr1="{"cardName":"bankCard1","cardCode":"888888888","cardValue":99999999}"; String cardjsonStr2="{"cardName":"bankCard2","cardCode":"999999999","cardValue":222222222}"; JSON.parSEObject(cardjsonStr1); JSONArray jArray2=new JSONArray(); //将JSON字符串转成JSON对象,加入到JSONArray,[注意一定要用JSON.parSEObject()方法转换成JSON对象,否则还是字符串,转成JSON串的时候会带双引号。] jArray2.add(JSON.parSEObject(cardjsonStr1)); jArray2.add(JSON.parSEObject(cardjsonStr2)); jObject2.put("cardList", jArray2); String json3=jObject2.toJSONString(); System.out.println(json3); } }
pom.xml中引入fastjson包
com.alibabafastjson1.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"}
Gson中@JsonAdater注解的几种方式总结
Gson @JsonAdater注解的几种方式
总结
可以通过自定义TypeAdapter和TypeAdapterFactory的方式,自定义gson的序列化和反序列规则,TypeAdapterFactory可以拿到上下文gson、TokenType类型;
也可以通过继承JsonReader重新写一次代码,在beginArray和endArray想办法跳过array的string形式的左右 双引号", gson.fromJson(myJsonReader, Type)也可以实现 解析时自动将String变为List,但采用注解@JsonAdapter的方式更为正规一些;
问题描述
json字符串:
{ "cityIds": "[1,2,1001,13131]", "types": "[{\"name\": \"biz\",\"details\": [1]}]" }
java对象定义:
@Data public static class RequestParams { // json字符串里对应的是String private List<TypeItem> types; private List<Integer> cityIds; } @Data public static class TypeItem { private String name; private List<Integer> details; }
可以看到json里面cityIds和types都是String,而pojo里则是List,使用gson的fromJson将json转为pojo会发生报错
方式一
@JsonAdapter(StringCollectionTypeAdapterFactory.class) private List<TagItem> tags; @JsonAdapter(StringCollectionTypeAdapterFactory.class) private List<Integer> cityIds; public static class StringCollectionTypeAdapterFactory implements TypeAdapterFactory { @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { // 为了write的时候能使用到elementTypeAdapter Type type = typeToken.getType(); Class<? super T> rawType = typeToken.getRawType(); if (!Collection.class.isAssignableFrom(rawType)) { return null; } Type elementType = $Gson$Types.getCollectionElementType(type, rawType); TypeAdapter<?> elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); TypeAdapter<T> result = new Adapter(gson, elementTypeAdapter, typeToken); return result; } private static final class Adapter<E> extends TypeAdapter<Collection<E>> { private final TypeAdapter<E> elementTypeAdapter; private final Gson gson; private final TypeToken listType; public Adapter(Gson context, TypeAdapter<E> elementTypeAdapter, TypeToken listType) { this.elementTypeAdapter = elementTypeAdapter; this.gson = context; this.listType = listType; } @Override public Collection<E> read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull(); return null; } List<E> list = gson.fromJson(in.nextString(), listType.getType()); return list; } // write后可以将array的string格式,重新变成array @Override public void write(JsonWriter out, Collection<E> collection) throws IOException { if (collection == null) { out.nullValue(); return; } out.beginArray(); for (E element : collection) { elementTypeAdapter.write(out, element); } out.endArray(); } } }
方式二-write原样
public static class StringCollectionTypeAdapterFactory1 implements TypeAdapterFactory { @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { return new Adapter(gson, typeToken); } private static final class Adapter<E> extends TypeAdapter<Collection<E>> { private final Gson gson; private final TypeToken listType; public Adapter(Gson context, TypeToken listType) { this.gson = context; this.listType = listType; } @Override public Collection<E> read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull(); return null; } List<E> list = gson.fromJson(in.nextString(), listType.getType()); return list; } @Override public void write(JsonWriter out, Collection<E> collection) throws IOException { if (collection == null) { out.nullValue(); return; } out.value(gson.toJson(collection)); } } }
方式三-简单写法
private static class CollectionStringTypeAdapterFactory implements TypeAdapterFactory { @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { return new TypeAdapter<T>() { @Override public void write(JsonWriter out, T value) throws IOException { if (value == null) { out.nullValue(); return; } gson.getAdapter(type).write(out, value); } @Override public T read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { return null; } if (in.peek() == JsonToken.BEGIN_ARRAY) { return gson.getAdapter(type).read(in); } T collection = gson.fromJson(in.nextString(), type.getType()); return collection; } }; } }
测试用例如下所示:
@Test public void testGson1() { Gson gson = new Gson(); RequestParams requestParam; String json; // 1.自动将string转为属性的List json = "{\"id\": \"000000\",\"types\": \"[{\\\"name\\\":\\\"name1\\\",\\\"list\\\":[1,2]},{\\\"name\\\":\\\"name2\\\",\\\"list\\\":[3,4]}]\",\"keywordIds\": \"[12,13]\"}"; System.out.println(json); requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); // 2.jsonArray也可以转为List json = "{\"id\": \"000000\",\"keywordIds\": [12,13],\"types\": [{\"name\":\"name1\",\"list\":[1,2]},{\"name\":\"name2\",\"list\":[3,4]}]}"; requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); // 3.换行的方式呢 json = "{\n" + "\t\"id\": \"000000\",\n" + "\t\"keywordIds\": [12,13],\n" + "\t\"types\": [{\"name\":\"name1\",\"list\":[1,2]},{\"name\":\"name2\",\"list\":[3,4]}]\n" + "}"; requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); // 4.能否将List里面的Integer变成String呢 json = "{\n" + "\t\"id\": \"000000\",\n" + "\t\"keywordIds\": [12,13],\n" + "\t\"types\": [{\"name\":\"name1\",\"list1\":[1,2]},{\"name\":\"name2\",\"list1\":[3,4]}]\n" + "}"; requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); // 5.能否将List里面的Integer变成String json = "{\n" + "\t\"id\": \"000000\",\n" + "\t\"keywordIds1\": [12,13],\n" + "\t\"types\": [{\"name\":\"name1\",\"list1\":[1,2]},{\"name\":\"name2\",\"list1\":[3,4]}]\n" + "}"; requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); // 6.自动将string转为属性的List, 并且list里面的Integer变为String json = "{\"id\": \"000000\",\"types\": \"[{\\\"name\\\":\\\"name1\\\",\\\"list1\\\":[1,2]},{\\\"name\\\":\\\"name2\\\",\\\"list1\\\":[3,4]}]\",\"keywordIds1\": \"[12,13]\"}"; System.out.println(json); requestParam = gson.fromJson(json, new TypeToken<RequestParams>() {}.getType()); Assert.assertTrue(requestParam.getTypes().get(0).getClass().getName().indexOf("TypeItem") >= 0); System.out.println(gson.toJson(requestParam)); } @Data public static class RequestParams { private String id; @JsonAdapter(CollectionStringTypeAdapterFactory.class) private List<TypeItem> types; @JsonAdapter(CollectionStringTypeAdapterFactory.class) private List<Integer> keywordIds; @JsonAdapter(CollectionStringTypeAdapterFactory.class) private List<String> keywordIds1; } @Data public static class TypeItem { private String name; private List<Integer> list; private List<String> list1; }
Gson注解
@SerializedName
主要应用在Gson解析json字符串时。Gson能直接将json字符串解析成java对象或者集合,也能将java对象转换为json字符串表示。例如有json数据如下:
{ "id":"1" "n":"zhangsan" "p":"123456" "s":"0" }
它能被解析到下面这个对象
public class User{ private String id; private String n; private String p; private string s; }
默认在字段名相同的字段间解析,所以User类必须要这样写才能直接使用Gson解析出来,但是java对象里的属性名和json里的字段名有时会不一样。Gson提供注解的方法来解决这个问题。
public class User{ private String id; @SerializedName("n") private String userName; @SerializedName("p") private String password; @SerializedName("s") private String sex; }
Expose
通常与@SerializedName连用,当我们不想把某个属性包含到json中时可以用。
public class UserSimple { @Expose() String name; // equals serialize & deserialize @Expose(serialize = false, deserialize = false) String email; @Expose(serialize = false) int age; @Expose(deserialize = false) boolean isDeveloper; // equals only serialize }
序列化的结果将只有name和isDeveloper出现在json中,因为serialize都是false。反序列化时,java对象将只会拥有json中的name和age,因为diserialze是true。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
- JAVA使用Gson解析json数据实例解析
- Gson序列化指定忽略字段的三种写法详解
- GSON实现Java对象与JSON格式对象相互转换的完全教程
jackson java转json hibernate懒加载造成的无限递归问题
<divid="content_views">
<p><span><span>@JsonIgnore @JsonFilter @JsonBackReference @JsonManagedReference @JsonIgnoreProperties</span></span></p> <p><span>jackson中的@JsonBackReference和@JsonManagedReference,以及@JsonIgnore均是为了解决对象中存在双向引用导致的无限递归(infinite recursion)问题。这些标注均可用在属性或对应的get、set方法中。 </span><span> </span></p> <br><span>@JsonBackReference和@JsonManagedReference:这两个标注通常配对使用,通常用在父子关系中。@JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)。@JsonManagedReference标注的属性则会被序列化。在序列化时,@JsonBackReference的作用相当于@JsonIgnore,此时可以没有@JsonManagedReference。但在反序列化(deserialization,即json数据转换为对象)时,如果没有@JsonManagedReference,则不会自动注入@JsonBackReference标注的属性(被忽略的父或子);如果有@JsonManagedReference,则会自动注入自动注入@JsonBackReference标注的属性。 </span><span> </span><br><br><p><span>@JsonIgnore:直接忽略某个属性,以断开无限递归,序列化或反序列化均忽略。当然如果标注在get、set方法中,则可以分开控制,序列化对应的是get方法,反序列化对应的是set方法。在父子关系中,当反序列化时,@JsonIgnore不会自动注入被忽略的属性值(父或子),这是它跟@JsonBackReference和@JsonManagedReference最大的区别。</span></p> <p><br></p> <p><span><span>@JsonIgnoreProperties 用法</span></span></p> <p><span></span></p> <pre><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span>//忽略parent models属性</span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div><span>@JsonIgnoreProperties</span>({<span>"parent"</span>,<span>"models"</span>})</div></div></li><li><div><divdata-line-number="3"></div></div><div><div><span>public</span> <span><span>class</span> <span>Module</span></span>{</div></div></li><li><div><divdata-line-number="4"></div></div><div><div> <span>@OneToMany</span>(fetch=FetchType.LAZY,mappedBy=<span>"parent"</span>,cascade=CascadeType.REMOVE)</div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span>public</span> java.util.List<Module> models;</div></div></li><li><div><divdata-line-number="6"></div></div><div><div> </div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span>@ManyToOne</span>(fetch=FetchType.LAZY)</div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span>@JoinColumn</span>(name=<span>"parent_id"</span>,referencedColumnName=<span>"id"</span>)</div></div></li><li><div><divdata-line-number="9"></div></div><div><div> <span>public</span> Module parent;</div></div></li><li><div><divdata-line-number="10"></div></div><div><div>}</div></div></li></ol></code><divdata-title="登录后复制" onclick="hljs.signin(event)"></div></pre> <pre></pre> <pre></pre> <p><br></p> <p><span>@JsonFilter用法</span></p> <p><span></span></p> <pre><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span>//忽略parent models属性</span></div></div></li><li><div><divdata-line-number="2"></div></div><div><div><span>@JsonFilter</span>(<span>"module"</span>)</div></div></li><li><div><divdata-line-number="3"></div></div><div><div><span>public</span> <span><span>class</span> <span>Module</span></span>{</div></div></li><li><div><divdata-line-number="4"></div></div><div><div> <span>@OneToMany</span>(fetch=FetchType.LAZY,mappedBy=<span>"parent"</span>,cascade=CascadeType.REMOVE)</div></div></li><li><div><divdata-line-number="5"></div></div><div><div> <span>public</span> java.util.List<Module> models;</div></div></li><li><div><divdata-line-number="6"></div></div><div><div> </div></div></li><li><div><divdata-line-number="7"></div></div><div><div> <span>@ManyToOne</span>(fetch=FetchType.LAZY)</div></div></li><li><div><divdata-line-number="8"></div></div><div><div> <span>@JoinColumn</span>(name=<span>"parent_id"</span>,referencedColumnName=<span>"id"</span>)</div></div></li><li><div><divdata-line-number="9"></div></div><div><div> <span>public</span> Module parent;</div></div></li><li><div><divdata-line-number="10"></div></div><div><div>}</div></div></li></ol></code><divdata-title="登录后复制" onclick="hljs.signin(event)"></div></pre><pre><code><ol><li><div><divdata-line-number="1"></div></div><div><div>测试代码:</div></div></li><li><div><divdata-line-number="2"></div></div><div><div>Module <span>module</span>=moduleService.findModuleByName(<span>"文件管理"</span>);</div></div></li><li><div><divdata-line-number="3"></div></div><div><div>ObjectMapper mapper=<span>new</span> ObjectMapper();</div></div></li><li><div><divdata-line-number="4"></div></div><div><div>FilterProvider filterProvider=<span>new</span> SimpleFilterProvider().addFilter(<span>"module"</span>, SimpleBeanPropertyFilter.serializeAllExcept(<span>"parent"</span>,<span>"models"</span>));</div></div></li><li><div><divdata-line-number="5"></div></div><div><div>mapper.setFilters(filterProvider);</div></div></li><li><div><divdata-line-number="6"></div></div><div><div>String resultString=mapper.writeValueAsString(<span>module</span>);</div></div></li></ol></code><divdata-title="登录后复制" onclick="hljs.signin(event)"></div></pre> <p></p> <pre></pre> <p></p> <pre></pre> <p><span>JsonFilter可以动态指定过滤的属性,缺点:每次转换都要设置过滤器,否则会报错,就这点很不爽。既然不爽就换种方式过滤,使用fastjson,请看下面的代码:</span></p> <p><span></span></p> <pre><code><ol><li><div><divdata-line-number="1"></div></div><div><div><span>package</span> com.company.project.common.util;</div></div></li><li><div><divdata-line-number="2"></div></div><div><div> </div></div></li><li><div><divdata-line-number="3"></div></div><div><div><span>import</span> java.util.Map;</div></div></li><li><div><divdata-line-number="4"></div></div><div><div><span>import</span> java.util.Map.Entry;</div></div></li><li><div><divdata-line-number="5"></div></div><div><div><span>import</span> java.util.Set;</div></div></li><li><div><divdata-line-number="6"></div></div><div><div> </div></div></li><li><div><divdata-line-number="7"></div></div><div><div><span>import</span> com.alibaba.fastjson.JSON;</div></div></li><li><div><divdata-line-number="8"></div></div><div><div><span>import</span> com.alibaba.fastjson.serializer.JSONSerializer;</div></div></li><li><div><divdata-line-number="9"></div></div><div><div><span>import</span> com.alibaba.fastjson.serializer.PropertyFilter;</div></div></li><li><div><divdata-line-number="10"></div></div><div><div><span>import</span> com.alibaba.fastjson.serializer.SerializeWriter;</div></div></li><li><div><divdata-line-number="11"></div></div><div><div><span>import</span> com.alibaba.fastjson.serializer.SerializerFeature;</div></div></li><li><div><divdata-line-number="12"></div></div><div><div> </div></div></li><li><div><divdata-line-number="13"></div></div><div><div><span>public</span> <span><span>class</span> <span>JsonHelpler</span> </span>{</div></div></li><li><div><divdata-line-number="14"></div></div><div><div> </div></div></li><li><div><divdata-line-number="15"></div></div><div><div> <span><span>public</span> <span>static</span> String <span>toJSON</span><span>(Object o)</span></span>{</div></div></li><li><div><divdata-line-number="16"></div></div><div><div> <span>return</span> JSON.toJSONString(o,SerializerFeature.WriteMapNullValue);</div></div></li><li><div><divdata-line-number="17"></div></div><div><div> }</div></div></li><li><div><divdata-line-number="18"></div></div><div><div> </div></div></li><li><div><divdata-line-number="19"></div></div><div><div> <span><span>public</span> <span>static</span> SerializeWriter <span>toJSON</span><span>(Object obj, <span>final</span> Map<Class<?>, Set<String>> includeMap)</span></span>{</div></div></li><li><div><divdata-line-number="20"></div></div><div><div> PropertyFilter filter = <span>new</span> PropertyFilter() {</div></div></li><li><div><divdata-line-number="21"></div></div><div><div> <span>@Override</span></div></div></li><li><div><divdata-line-number="22"></div></div><div><div> <span><span>public</span> <span>boolean</span> <span>apply</span><span>(Object source, String name, Object value)</span> </span>{</div></div></li><li><div><divdata-line-number="23"></div></div><div><div> <span>for</span>(Entry<Class<?>, Set<String>> entry : includeMap.entrySet()) { </div></div></li><li><div><divdata-line-number="24"></div></div><div><div> Class<?> class1 = entry.getKey(); </div></div></li><li><div><divdata-line-number="25"></div></div><div><div> <span>if</span>(source.getClass() == class1){ </div></div></li><li><div><divdata-line-number="26"></div></div><div><div> Set<String> fields = entry.getValue(); </div></div></li><li><div><divdata-line-number="27"></div></div><div><div> <span>for</span>(String field : fields) { </div></div></li><li><div><divdata-line-number="28"></div></div><div><div> <span>if</span>(field.equals(name)){ </div></div></li><li><div><divdata-line-number="29"></div></div><div><div> <span>return</span> <span>false</span>; </div></div></li><li><div><divdata-line-number="30"></div></div><div><div> } </div></div></li><li><div><divdata-line-number="31"></div></div><div><div> } </div></div></li><li><div><divdata-line-number="32"></div></div><div><div> } </div></div></li><li><div><divdata-line-number="33"></div></div><div><div> }</div></div></li><li><div><divdata-line-number="34"></div></div><div><div> <span>return</span> <span>true</span>; </div></div></li><li><div><divdata-line-number="35"></div></div><div><div> } };</div></div></li><li><div><divdata-line-number="36"></div></div><div><div> SerializeWriter sw = <span>new</span> SerializeWriter(); </div></div></li><li><div><divdata-line-number="37"></div></div><div><div> JSONSerializer serializer = <span>new</span> JSONSerializer(sw);</div></div></li><li><div><divdata-line-number="38"></div></div><div><div> serializer.getPropertyFilters().add(filter);</div></div></li><li><div><divdata-line-number="39"></div></div><div><div> serializer.write(obj);</div></div></li><li><div><divdata-line-number="40"></div></div><div><div> <span>return</span> sw;</div></div></li><li><div><divdata-line-number="41"></div></div><div><div> }</div></div></li><li><div><divdata-line-number="42"></div></div><div><div> </div></div></li><li><div><divdata-line-number="43"></div></div><div><div>}</div></div></li><li><div><divdata-line-number="44"></div></div><div><div> </div></div></li><li><div><divdata-line-number="45"></div></div><div><div>测试代码</div></div></li><li><div><divdata-line-number="46"></div></div><div><div>Map<Class<?>, Set<String>> includeMap = <span>new</span> HashMap<Class<?>, Set<String>>();</div></div></li><li><div><divdata-line-number="47"></div></div><div><div>Set<String> set = <span>new</span> HashSet<String>();</div></div></li><li><div><divdata-line-number="48"></div></div><div><div>set.add(<span>"parent"</span>);</div></div></li><li><div><divdata-line-number="49"></div></div><div><div>set.add(<span>"models"</span>);</div></div></li><li><div><divdata-line-number="50"></div></div><div><div>includeMap.put(Module.class, set);</div></div></li><li><div><divdata-line-number="51"></div></div><div><div>SerializeWriter resultString=JsonHelpler.toJSON(<span>module</span>, includeMap);</div></div></li><li><div><divdata-line-number="52"></div></div><div><div>System.out.println(resultString);</div></div></li></ol></code><divdata-title="登录后复制" onclick="hljs.signin(event)"></div></pre><br><br><p></p> <br><p></p> 原文地址:https://blog.csdn.net/cym19890801/article/details/49660105 </div>
Java - 格式化输出JSON字符串的两种方式
[TOC]
1 使用阿里的FastJson
1.1 项目的pom.xml依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
1.2 Java示例代码
(1) 导入的包:
com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
(2) 测试代码:
其中JSON字符串为: {"_index":"book_shop","_type":"it_book","_id":"1","_score":1.0,"_source":{"name": "Java编程思想(第4版)","author": "[美] Bruce Eckel","category": "编程语言","price": 109.0,"publisher": "机械工业出版社","date": "2007-06-01","tags": [ "Java", "编程语言" ]}}
public static void main(String[] args) {
String jsonString = "{\"_index\":\"book_shop\",\"_type\":\"it_book\",\"_id\":\"1\",\"_score\":1.0," +
"\"_source\":{\"name\": \"Java编程思想(第4版)\",\"author\": \"[美] Bruce Eckel\",\"category\": \"编程语言\"," +
"\"price\": 109.0,\"publisher\": \"机械工业出版社\",\"date\": \"2007-06-01\",\"tags\": [ \"Java\", \"编程语言\" ]}}";
JSONObject object = JSONObject.parseObject(jsonString);
String pretty = JSON.toJSONString(object, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
System.out.println(pretty);
}
(3) 格式化输出后的结果:
说明: FastJson通过Tab键进行换行后的格式化.
{
"_index":"book_shop",
"_type":"it_book",
"_source":{
"date":"2007-06-01",
"author":"[美] Bruce Eckel",
"price":109.0,
"name":"Java编程思想(第4版)",
"publisher":"机械工业出版社",
"category":"编程语言",
"tags":[
"Java",
"编程语言"
]
},
"_id":"1",
"_score":1.0
}
2 使用谷歌的Gson
2.1 项目的pom.xml依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
2.2 Java示例代码
(1) 导入的包:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
(2) 测试代码:
JSON字符串与上述测试代码相同.
public static void main(String[] args) {
String jsonString = "{\"_index\":\"book_shop\",\"_type\":\"it_book\",\"_id\":\"1\",\"_score\":1.0," +
"\"_source\":{\"name\": \"Java编程思想(第4版)\",\"author\": \"[美] Bruce Eckel\",\"category\": \"编程语言\"," +
"\"price\": 109.0,\"publisher\": \"机械工业出版社\",\"date\": \"2007-06-01\",\"tags\": [ \"Java\", \"编程语言\" ]}}";
String pretty = toPrettyFormat(jsonString)
System.out.println(pretty);
}
/**
* 格式化输出JSON字符串
* @return 格式化后的JSON字符串
*/
private static String toPrettyFormat(String json) {
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
return gson.toJson(jsonObject);
}
(3) 格式化输出后的结果:
说明: Gson使用2个空格作为换行后的格式转换.
{
"_index": "book_shop",
"_type": "it_book",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "Java编程思想(第4版)",
"author": "[美] Bruce Eckel",
"category": "编程语言",
"price": 109.0,
"publisher": "机械工业出版社",
"date": "2007-06-01",
"tags": [
"Java",
"编程语言"
]
}
}
参考资料
JAVA-Gson-格式化输出json字符串
版权声明
出处: 博客园 瘦风的博客(https://www.cnblogs.com/shoufeng)
感谢阅读, 如果文章有帮助或启发到你, 点个[<a href="javascript:void(0);" onclick="DiggIt(11196500,cb_blogId,1);green_channel_success(this,''谢谢推荐'');">好文要顶</a>] 或 [<a href="javascript:void(0);" onclick="votePost(11196500,''Digg'')">推荐</a>] 吧
本文版权归博主所有, 欢迎转载, 但 [必须在文章页面明显位置标明原文链接], 否则博主保留追究相关人员法律责任的权利.
java ajax返回 Json 的 几种方式
原文:https://blog.csdn.net/qq_26289533/article/details/78749057
方式 1. : 自写代码转 Json
需要 HttpHttpServletRequest request HttpServletResponse response
后台 :
@RequestMapping(value="/haha")
public string xxx { HttpHttpServletRequest request,HttpServletResponse response}
{ JSONObject json =new JSONObject();
json.put("result"," success")
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
PrintWriter out = null;
out = response.getWriter();
out.write(json.toString());
}
前端 :
$.ajax({
data : {
// userNameOrTel: $("#user").val(),
// password: $("#pwd").val()
},
type : "post",
url : "admin/login/",
dataType : "json",
contentType : "application/json;charset=utf-8",
async : false, //同步 异步
success : function(data) {
debugger;
}
}
});
方式 2: @ResponseBody 注解
@ResponseBody
@RequestMapping(value="/haha")
public Msg xxx {}
{ return msg }
$.ajax({
data : {
// userNameOrTel: $("#name").val(),
// password: $("#pwd").val()
},
type : "post",
url : "haha",
dataType : "json",
//contentType : "application/json;charset=utf-8", // 区别在这里,不要加,不然接收不到请求参数
async : false, //同步异步
success : function(msg) {
debugger;}}});
方式 3 : @RestController 注解 (此类里的所以方法返回值都是 Json)
拓展知识 当遇到 ajax 请求参数必须是Json 格式的话如下 :
前端 ajax :
data:JSON.stringify({''channelId'':channelId}),
success:function(data){
alert(data.channelId);
},
contentType:''application/json;charset=utf-8''
后台 :
@RequestMapping(value="/login",produces="application/json;charset=UTF-8") @ResponseBody public String test2() { }
今天关于Java转JSON串的几种方式和java 转 json的讲解已经结束,谢谢您的阅读,如果想了解更多关于Gson中@JsonAdater注解的几种方式总结、jackson java转json hibernate懒加载造成的无限递归问题、Java - 格式化输出JSON字符串的两种方式、java ajax返回 Json 的 几种方式的相关知识,请在本站搜索。
本文标签: