Android --- 怎么把其他类型的数据转换成 Json 字符串
生活随笔
收集整理的這篇文章主要介紹了
Android --- 怎么把其他类型的数据转换成 Json 字符串
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 一、其他類型的數(shù)據(jù)轉(zhuǎn)換成 Json 字符串(原生方法)
- 二、使用 Google 的 Gson 庫將各種類型的數(shù)據(jù)轉(zhuǎn)換成 Json 字符串
一、其他類型的數(shù)據(jù)轉(zhuǎn)換成 Json 字符串(原生方法)
今天用AS寫了這么一個功能,就是怎么把 Json 數(shù)據(jù)轉(zhuǎn)換成 Json 字符串 ,怎么將 Json 字符串存到本地文件中,首先第一個問題:怎么把其他類型的數(shù)據(jù)轉(zhuǎn)換成 Json 字符串
其它類型的數(shù)據(jù)有很多,比如 String、Object、Number、Boolean、Bean、List、Array、Map、Set 等,我們把這些封裝到一個工具類中即可,上代碼,嗨嗨!
package com.example.baseobservable.json;import com.googlecode.openbeans.IntrospectionException; import com.googlecode.openbeans.Introspector; import com.googlecode.openbeans.PropertyDescriptor;import java.util.List; import java.util.Map; import java.util.Set;public class JsonUtils {public String stringToJson(String s) {if (s == null) {return nullToJson();}StringBuilder sb = new StringBuilder();for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);switch (ch) {case '"':sb.append("\\\"");break;case '\\':sb.append("\\\\");break;case '\b':sb.append("\\b");break;case '\f':sb.append("\\f");break;case '\n':sb.append("\\n");break;case '\r':sb.append("\\r");break;case '\t':sb.append("\\t");break;case '/':sb.append("\\/");break;default:if (ch >= '\u0000' && ch <= '\u001F') {String ss = Integer.toHexString(ch);sb.append("\\u");for (int k = 0; k < 4 - ss.length(); k++) {sb.append('0');}sb.append(ss.toUpperCase());} else {sb.append(ch);}}}return sb.toString();}public String nullToJson() {return "";}public String objectToJson(Object obj) {StringBuilder json = new StringBuilder();if (obj == null) {json.append("\"\"");} else if (obj instanceof Number) {json.append(numberToJson((Number) obj));} else if (obj instanceof Boolean) {json.append(booleanToJson((Boolean) obj));} else if (obj instanceof String) {json.append("\"").append(stringToJson(obj.toString())).append("\"");} else if (obj instanceof Object[]) {json.append(arrayToJson((Object[]) obj));} else if (obj instanceof List) {json.append(listToJson((List<?>) obj));} else if (obj instanceof Map) {json.append(mapToJson((Map<?, ?>) obj));} else if (obj instanceof Set) {json.append(setToJson((Set<?>) obj));} else {json.append(beanToJson(obj));}return json.toString();}public String numberToJson(Number number) {return number.toString();}public String booleanToJson(Boolean bool) {return bool.toString();}public String beanToJson(Object bean) {StringBuilder json = new StringBuilder();json.append("{");PropertyDescriptor[] props = null;try {props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();} catch (IntrospectionException e) {}if (props != null) {for (int i = 0; i < props.length; i++) {try {String name = objectToJson(props[i].getName());String value = objectToJson(props[i].getReadMethod().invoke(bean));json.append(name);json.append(":");json.append(value);json.append(",");} catch (Exception e) {}}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}public String listToJson(List<?> list) {StringBuilder json = new StringBuilder();json.append("[");if (list != null && list.size() > 0) {for (Object obj : list) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}public String arrayToJson(Object[] array) {StringBuilder json = new StringBuilder();json.append("[");if (array != null && array.length > 0) {for (Object obj : array) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}public String mapToJson(Map<?, ?> map) {StringBuilder json = new StringBuilder();json.append("{");if (map != null && map.size() > 0) {for (Object key : map.keySet()) {json.append(objectToJson(key));json.append(":");json.append(objectToJson(map.get(key)));json.append(",");}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}public String setToJson(Set<?> set) {StringBuilder json = new StringBuilder();json.append("[");if (set != null && set.size() > 0) {for (Object obj : set) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();} }這個工具類可能會報錯在99行,是因為沒有 openbeans-1.0.jar 包的原因
這個包 csdn 有下載的,沒有積分下載的私聊我
二、使用 Google 的 Gson 庫將各種類型的數(shù)據(jù)轉(zhuǎn)換成 Json 字符串
在一種我們講到了原生的方法,但是 Gson 會讓我們使用起來更加方便
1.首先導(dǎo)入依賴:
implementation 'com.google.code.gson:gson:2.8.0'或者
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.0</version></dependency>2.各種數(shù)據(jù)類型轉(zhuǎn)換 json:toJson
Gson gson = new Gson(); String json = gson.toJson(obj); // obj 代表各種數(shù)據(jù)類型3.json 轉(zhuǎn) bean:fromJson
Gson gson = new Gson(); String json = "{\"username\":\"張三\",\"pwd\":\"123456\"}"; Book book = gson.fromJson(json, User.class);4.json 轉(zhuǎn)復(fù)雜的bean,比如List : fromJson
// 將 json 轉(zhuǎn)成復(fù)雜類型的 bean,需要使用 TypeToken Gson gson = new Gson(); String json = "[{\"username\":\"張三\",\"pwd\":\"123456\"},{\"username\":\"李四\",\"pwd\":\"678910\"}]"; // 將 json 轉(zhuǎn)成 List List list = gson.fromJson(json, new TypeToken<List>() {}.getType());~還有阿里巴巴的 Fastjson,這里就不一一贅述了
總結(jié)
以上是生活随笔為你收集整理的Android --- 怎么把其他类型的数据转换成 Json 字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android --- Android
- 下一篇: Win10电脑录屏,视频有杂音,用耳机录