一、Json轉Object方法
Json是一種輕量級的數據交換格式,在前後端分離開發中起到了非常重要的作用。Json轉Object是將Json字符串轉化為對應的Java對象的過程。下面是一個簡單的Json字符串:
{ "name": "張三", "age": 18, "gender": "男" }
要將上述Json字符串轉化為對應的Java對象,我們需要使用Json的解析庫。Gson是Google公司提供的一款非常優秀的Java解析Json庫,使用它可以很方便地將Json字符串轉化為Java對象。示例代碼如下:
import com.google.gson.Gson; public class JsonToObject { public static void main(String[] args) { String jsonString = "{\"name\":\"張三\",\"age\":18,\"gender\":\"男\"}"; Gson gson = new Gson(); Person person = gson.fromJson(jsonString, Person.class); System.out.println(person); } } class Person { private String name; private Integer age; private String gender; // getters and setters @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
上述代碼中,我們使用Gson的fromJson方法將Json字符串轉化為Person對象。需要注意的是,Person對象中的屬性名稱和Json字符串中的屬性名稱是一致的。
二、Json轉Object字段不對應
有時候,我們在將Json字符串轉化為Java對象時,發現Json字符串中的屬性名稱和Java對象中的屬性名稱不一致。這時,我們可以使用Gson的@SerializedName註解來解決這個問題。@SerializedName可以將屬性名和Json字符串中的屬性名進行映射。示例代碼如下:
import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; public class JsonToObject2 { public static void main(String[] args) { String jsonString = "{\"NAME\":\"張三\",\"AGE\":18,\"GENDER\":\"男\"}"; Gson gson = new Gson(); Person2 person = gson.fromJson(jsonString, Person2.class); System.out.println(person); } } class Person2 { @SerializedName("NAME") private String name; @SerializedName("AGE") private Integer age; @SerializedName("GENDER") private String gender; // getters and setters @Override public String toString() { return "Person2{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
上述代碼中,我們使用@SerializedName註解將Java對象中的屬性名稱和Json字符串中的屬性名稱進行了映射。
三、Json轉Object對象 js
在前端開發中,我們通常會使用JavaScript來操作Json字符串。如果我們要將JavaScript對象轉化為對應的Java對象,可以使用Java的ScriptEngine對象來執行JavaScript代碼。示例代碼如下:
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JsonToObject3 { public static void main(String[] args) throws ScriptException { String json = "{ \"name\":\"張三\", \"age\":18, \"gender\":\"男\" }"; ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); String script = "Java.asJSONCompatible(" + json + ")"; Object result = engine.eval(script); System.out.println(result); } }
上述代碼中,我們使用ScriptEngine對象將Json字符串轉化為了對應的Java對象。
四、Json轉Object屬性大小寫
在Java中,屬性名稱是區分大小寫的。如果Json字符串中的屬性名稱和Java對象中的屬性名稱大小寫不一致,那麼在轉化為Java對象時會出現問題。可以使用GsonBuilder對象的setFieldNamingStrategy方法在轉化時進行大小寫的轉換。示例代碼如下:
import com.google.gson.FieldNamingStrategy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; import java.lang.reflect.Field; public class JsonToObject4 { public static void main(String[] args) { String jsonString = "{\"Name\":\"張三\",\"Age\":18,\"Gender\":\"男\"}"; GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() { @Override public String translateName(Field field) { SerializedName annotation = field.getAnnotation(SerializedName.class); if (annotation != null) { return annotation.value(); } else { return field.getName().toLowerCase(); } } }); Gson gson = gsonBuilder.create(); Person3 person = gson.fromJson(jsonString, Person3.class); System.out.println(person); } } class Person3 { private String name; private Integer age; private String gender; // getters and setters @Override public String toString() { return "Person3{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
上述代碼中,我們使用GsonBuilder對象設置了一個FieldNamingStrategy對象,該對象可以將屬性名稱轉為小寫。
五、Json轉excel
有時候,我們需要將Json數據導出到Excel中。使用Apache POI庫可以很方便地實現Json轉Excel的功能。示例代碼如下:
import com.google.gson.Gson; import org.apache.poi.hssf.usermodel.*; import java.io.FileOutputStream; import java.util.*; public class JsonToExcel { public static void main(String[] args) throws Exception { String jsonString = "[{\"name\":\"張三\",\"age\":18,\"gender\":\"男\"},{\"name\":\"李四\",\"age\":20,\"gender\":\"女\"}]"; Gson gson = new Gson(); Person4[] persons = gson.fromJson(jsonString, Person4[].class); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("sheet1"); HSSFRow row0 = sheet.createRow(0); HSSFCell cell0 = row0.createCell(0); cell0.setCellValue("姓名"); HSSFCell cell1 = row0.createCell(1); cell1.setCellValue("年齡"); HSSFCell cell2 = row0.createCell(2); cell2.setCellValue("性別"); for (int i = 0; i < persons.length; i++) { HSSFRow row = sheet.createRow(i + 1); HSSFCell cell3 = row.createCell(0); cell3.setCellValue(persons[i].getName()); HSSFCell cell4 = row.createCell(1); cell4.setCellValue(persons[i].getAge()); HSSFCell cell5 = row.createCell(2); cell5.setCellValue(persons[i].getGender()); } FileOutputStream fos = new FileOutputStream("persons.xls"); workbook.write(fos); fos.close(); } } class Person4 { private String name; private Integer age; private String gender; // getters and setters }
上述代碼中,我們使用Apache POI庫創建了一個Excel文件,並將Json數據寫入到Excel中。
六、Json轉xml
有時候,我們需要將Json數據轉化為XML格式。使用Jackson庫可以很方便地實現Json轉XML的功能。示例代碼如下:
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import java.io.IOException; import java.util.*; public class JsonToXml { public static void main(String[] args) throws IOException { String jsonString = "{\"name\":\"張三\",\"age\":18,\"gender\":\"男\"}"; ObjectMapper objectMapper = new ObjectMapper(); SimpleModule xmlModule = new SimpleModule(); xmlModule.addSerializer(new CDATAJsonSerializer()); objectMapper.registerModule(xmlModule); objectMapper.enable(SerializationFeature.INDENT_OUTPUT); XmlMapper xmlMapper = new XmlMapper(); String xmlString = xmlMapper.writeValueAsString(objectMapper.readValue(jsonString, Object.class)); System.out.println(xmlString); } } class CDATAJsonSerializer extends com.fasterxml.jackson.databind.JsonSerializer { @Override public void serialize(String value, com.fasterxml.jackson.core.JsonGenerator gen, com.fasterxml.jackson.databind.SerializerProvider serializers) throws IOException { gen.writeRaw(""); } }
上述代碼中,我們使用XmlMapper將Jackson的ObjectMapper對象轉化為XmlMapper對象。同樣,我們也可以使用CDATAJsonSerializer類將Json數據中的特殊字符封裝成CDATA形式輸出到XML文件中。
七、Json轉protobuf
Protocol Buffers是Google公司開發的一種輕量級的數據交換格式,使用它可以在不同的語言之間進行數據通信。Protobuf提供了一個.proto文件來定義數據類型,然後可以使用該文件生成對應的Java對象。示例代碼如下:
syntax = "proto3"; message Person { string name = 1; int32 age = 2; string gender = 3; } import com.google.protobuf.InvalidProtocolBufferException; public class JsonToProtobuf { public static void main(String[] args) throws InvalidProtocolBufferException { String jsonString = "{\"name\":\"張三\",\"age\":18,\"gender\":\"男\"}"; PersonProto.Person.Builder personBuilder = PersonProto.Person.newBuilder(); PersonProto.Person person = personBuilder.mergeFrom(jsonString.getBytes()).build(); System.out.println(person); } }
上述代碼中,我們使用Person.proto文件定義了Person數據類型,並使用該文件生成了一個Person.java對象。然後使用該對象的Builder類來將Json字符串轉化為Person對象。
八、Json轉換
在實際開發中,我們可能需要將Json數據從一個格式轉化為另一個格式。以下是將Json轉化為Properties格式的示例代碼:
import com.google.gson.Gson; import java.util.Properties; public class JsonToProperties { public static void main(String[] args) { String jsonString = "{\"name\":\"張三\",\"age\":18,\"gender\":\"男\"}"; Gson gson = new Gson(); Properties properties = gson.fromJson(jsonString, Properties.class); System.out.println(properties); } }
上述代碼中,我們將Json字符串轉化為了Properties對象。
除此之外,還可以將Json轉化為Yaml、Toml、INI等格式。
原創文章,作者:WWBXA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/316524.html