Eth*_*ode 7 serialization parsing json gson
我在这里有一个非常直截了当的问题.我需要从API中获取JSON并将其转换为我为它们创建的对象.
到目前为止,它会将它们反序列化为我的列表,但每个Metric对象都具有空值
JSON即将推出
{
"metrics": [
{
"metric": {
"type": 1,
"name": "slide-11-start",
"value": "1287249598295",
"sessionID": ""
}
},
{
"metric": {
"type": 1,
"name": "slide-21-start",
"value": "1287249601368",
"sessionID": ""
}
},
{
"metric": {
"type": 7,
"name": "resolution",
"value": "1680x1050",
"sessionID": ""
}
},
{
"metric": {
"type": 6,
"name": "OS",
"value": "Linux",
"sessionID": ""
}
},
{
"metric": {
"type": 5,
"name": "browser",
"value": "Netscape",
"sessionID": ""
}
}
]
Run Code Online (Sandbox Code Playgroud)
}
度量对象
public class Metric {
private int type;
private String name;
private String value;
private String sessionID;
/**
* @return the type
*/
public int getType() {
return type;
}
/**
* @param type the type to set
*/
public void setType(int type) {
this.type = type;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the value
*/
public String getValue() {
return value;
}
/**
* @param value the value to set
*/
public void setValue(String value) {
this.value = value;
}
/**
* @return the sessionID
*/
public String getSessionID() {
return sessionID;
}
/**
* @param sessionID the sessionID to set
*/
public void setSessionID(String sessionID) {
this.sessionID = sessionID;
}
}
Run Code Online (Sandbox Code Playgroud)
容器Ojbect
import java.util.List;
/**
*
* @author joshua
*/
public class MetricSet {
private List<Metric> metrics;
/**
* @return the metrics
*/
public List<Metric> getMetrics() {
return metrics;
}
/**
* @param metrics the metrics to set
*/
public void setMetrics(List<Metric> metrics) {
this.metrics = metrics;
}
}
Run Code Online (Sandbox Code Playgroud)
转换JSON的代码
String json = "";
if(request.getParameter("data") != null) {
json = request.getParameter("data");
}
MetricSet metrics = new MetricSet();
try {
Gson gson = new Gson();
Type listType = new TypeToken<MetricSet>() {}.getType();
metrics = gson.fromJson(json, MetricSet.class);
}
catch(Exception ex) {
String msg = ex.toString();
}
Run Code Online (Sandbox Code Playgroud)
您可以为JSON对象创建相应的java类.的integer,string值可以被映射为是.可以像这样解析JSON:
Gson gson = new GsonBuilder().create();
Response r = gson.fromJson(jsonString, Response.class);
Run Code Online (Sandbox Code Playgroud)
这是一个例子:http://rowsandcolumns.blogspot.com/2013/02/url-encode-http-get-solr-request-and.html
(才过了7.5个月。)
问题是您尝试反序列化的类结构与 JSON 结构不匹配。
以下是一个用于反序列化所提供的 JSON 的简单示例。输出是
[指标:[ [MetricContainer:[指标:类型=1,名称=slide-11-start,值=1287249598295,sessionID=]], [MetricContainer:[指标:类型=1,名称=slide-21-start,值=1287249601368,sessionID=]], [MetricContainer:[指标:类型=7,名称=分辨率,值=1680x1050,sessionID=]], [MetricContainer:[指标:类型=6,名称=操作系统,值=Linux,sessionID=]], [MetricContainer:[指标:类型=5,名称=浏览器,值=Netscape,sessionID=]]]]
public class Foo
{
static String jsonInput =
"{" +
"\"metrics\":" +
"[" +
"{" +
"\"metric\":" +
"{" +
"\"type\":1," +
"\"name\":\"slide-11-start\"," +
"\"value\":\"1287249598295\"," +
"\"sessionID\":\"\"" +
"}" +
"}," +
"{" +
"\"metric\":" +
"{" +
"\"type\":1," +
"\"name\":\"slide-21-start\"," +
"\"value\":\"1287249601368\"," +
"\"sessionID\":\"\"" +
"}" +
"}," +
"{" +
"\"metric\":" +
"{" +
"\"type\":7," +
"\"name\":\"resolution\"," +
"\"value\":\"1680x1050\"," +
"\"sessionID\":\"\"" +
"}" +
"}," +
"{" +
"\"metric\":" +
"{" +
"\"type\":6," +
"\"name\":\"OS\"," +
"\"value\":\"Linux\"," +
"\"sessionID\":\"\"" +
"}" +
"}," +
"{" +
"\"metric\":" +
"{" +
"\"type\":5," +
"\"name\":\"browser\"," +
"\"value\":\"Netscape\"," +
"\"sessionID\":\"\"" +
"}" +
"}" +
"]" +
"}";
public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Metrics metrics = gson.fromJson(jsonInput, Metrics.class);
System.out.println(metrics);
}
}
class Metrics
{
private List<MetricContainer> metrics;
@Override
public String toString()
{
return String.format(
"[Metrics: %1$s]",
metrics);
}
}
class MetricContainer
{
private Metric metric;
@Override
public String toString()
{
return String.format(
"[MetricContainer: %1$s]",
metric);
}
}
class Metric
{
private int type;
private String name;
private String value;
private String sessionID;
@Override
public String toString()
{
return String.format(
"[Metric: type=%1$d, name=%2$s, value=%3$s, sessionID=%4$s]",
type, name, value, sessionID);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16201 次 |
| 最近记录: |