com.google.gson.JsonSyntaxException 解析简单 JSON 输入流时
com.google.gson.JsonSyntaxException when parsing simple JSON Inputstream
我在解析简单 JSON 输入流时得到 com.google.gson.JsonSyntaxException
我的json是这个。
{
"logdata":[{
"millis": "1000",
"light": "333"
},
{
"millis": "2000",
"light": "333"
}
]
}
Java class -
import java.util.List;
public class Datalist {
private List<NavData> logdata;
/**
* @return the logdata
*/
public List<NavData> getLogdata() {
return logdata;
}
/**
* @param logdata the logdata to set
*/
public void setLogdata(List<NavData> logdata) {
this.logdata = logdata;
}
public class 导航数据 {
private String millis;
private String light;
/**
* @return the millis
*/
public String getMillis() {
return millis;
}
/**
* @param millis the millis to set
*/
public void setMillis(String millis) {
this.millis = millis;
}
/**
* @return the light
*/
public String getLight() {
return light;
}
/**
* @param light the light to set
*/
public void setLight(String light) {
this.light = light;
}
}
Json 输入流 Reader Class - 而 assetData 是上述 json.
的输入流
JsonReader reader = new JsonReader(new InputStreamReader(assetData, "UTF-8"));
Gson gson = new GsonBuilder().create();
Datalist out = gson.fromJson(reader, Datalist.class);
System.out.println(".."+out.getLogdata());
问题是因为您无法将字符串列表转换为包含以下项目的列表:
{
"millis": "1000",
"light": "333",
"temp": "78.32",
"vcc": "3.54"
}
如果您想转换为这些项目的列表,您需要用这些项目创建一个 class,属性 将是:
@Expose
private List<NavData> logdata;
其中 NavData 是具有这些参数的 class
import com.google.gson.annotations.Expose;
public class NavData {
@Expose
private String millis;
@Expose
private String light;
public String getMillis() {
return millis;
}
public void setMillis(String millis) {
this.millis = millis;
}
public String getLight() {
return light;
}
public void setLight(String light) {
this.light = light;
}
}
读取输入流:
StringBuilder stringBuilder = new StringBuilder();
CharBuffer charBuffer = CharBuffer.allocate(1024);
while (yourInputStream.read(charBuffer) > 0) {
charBuffer.flip();
stringBuilder.append(charBuffer.toString());
charBuffer.clear();
}
最后:
Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
.excludeFieldsWithoutExposeAnnotation().serializeNulls().create();
Datalist result = gson.fromJson(stringBuilder.toString(), Datalist.class);
我在解析简单 JSON 输入流时得到 com.google.gson.JsonSyntaxException
我的json是这个。
{ "logdata":[{ "millis": "1000", "light": "333" }, { "millis": "2000", "light": "333" } ] }
Java class -
import java.util.List;
public class Datalist {
private List<NavData> logdata;
/**
* @return the logdata
*/
public List<NavData> getLogdata() {
return logdata;
}
/**
* @param logdata the logdata to set
*/
public void setLogdata(List<NavData> logdata) {
this.logdata = logdata;
}
public class 导航数据 {
private String millis;
private String light;
/**
* @return the millis
*/
public String getMillis() {
return millis;
}
/**
* @param millis the millis to set
*/
public void setMillis(String millis) {
this.millis = millis;
}
/**
* @return the light
*/
public String getLight() {
return light;
}
/**
* @param light the light to set
*/
public void setLight(String light) {
this.light = light;
}
}
Json 输入流 Reader Class - 而 assetData 是上述 json.
的输入流 JsonReader reader = new JsonReader(new InputStreamReader(assetData, "UTF-8"));
Gson gson = new GsonBuilder().create();
Datalist out = gson.fromJson(reader, Datalist.class);
System.out.println(".."+out.getLogdata());
问题是因为您无法将字符串列表转换为包含以下项目的列表:
{
"millis": "1000",
"light": "333",
"temp": "78.32",
"vcc": "3.54"
}
如果您想转换为这些项目的列表,您需要用这些项目创建一个 class,属性 将是:
@Expose
private List<NavData> logdata;
其中 NavData 是具有这些参数的 class
import com.google.gson.annotations.Expose;
public class NavData {
@Expose
private String millis;
@Expose
private String light;
public String getMillis() {
return millis;
}
public void setMillis(String millis) {
this.millis = millis;
}
public String getLight() {
return light;
}
public void setLight(String light) {
this.light = light;
}
}
读取输入流:
StringBuilder stringBuilder = new StringBuilder();
CharBuffer charBuffer = CharBuffer.allocate(1024);
while (yourInputStream.read(charBuffer) > 0) {
charBuffer.flip();
stringBuilder.append(charBuffer.toString());
charBuffer.clear();
}
最后:
Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
.excludeFieldsWithoutExposeAnnotation().serializeNulls().create();
Datalist result = gson.fromJson(stringBuilder.toString(), Datalist.class);