我正在开发一个Android应用程序,我需要创建一个Json结果,其中包含某些结构中的某些数据。
这是我必须获得的:
{
"speedtest":"10Mbit/s",
"httpRequest":[
{
"url":"www.google.com",
"statusCode":"200"
},
{
"url":"www.google.com",
"statusCode":"200"
},
{
"url":"www.google.com",
"statusCode":"200"
}
],
"traceroute":[
{
"url":"www.google.com",
"nodes":[
"45.34.222.11",
"232.43.54.32"
]
},
{
"url":"www.google.com",
"nodes":[
"45.34.222.11",
"232.43.54.32"
]
},
{
"url":"www.google.com",
"nodes":[
"45.34.222.11",
"232.43.54.32"
]
}
]
}
这是我写的代码,但它不能正常工作,我不知道为什么。
public class JsonBuilder {
String LogTag = "LogTags";
JsonBuilder(long downSpeed, ArrayList < String > ReqTest) {
long ds = downSpeed;
ArrayList < String > rt = ReqTest;
JSONArray ja = null;
JSONObject mainJson = new JSONObject();
JSONObject speedData = new JSONObject();
try {
speedData.put("speedtest", ds+"Mbit/s");
} catch (JSONException e) {
Log.wtf(LogTag, "JSON exception SpeedTest", e);
}
JSONObject HttpData = new JSONObject();
String[] req_split;
for (int i = 0; i < rt.size(); i++) {
req_split = rt.get(i).split(";", 2);
try {
HttpData.put("url", req_split[0]);
HttpData.put("statusCode", req_split[1]);
} catch (JSONException e) {
Log.wtf(LogTag, "JSON exception", e);
}
}
ja = new JSONArray();
ja.put(HttpData);
try {
mainJson.put("httpRequest", ja);
} catch (JSONException e) {
e.printStackTrace();
}
Log.wtf(LogTag, "JSON" + mainJson.toString());
}
}
我已经创建了json的一部分,现在我不知道如何合并它
答案 0 :(得分:2)
更好更简单的方法是创建三个像这样的实体类
import com.google.gson.annotations.Expose;
public class Example {
@Expose(serialize = true)
String speedtest;
@Expose(serialize = true)
List<httpRequest> httpRequest;
@Expose(serialize = true)
List<traceroute> traceroute;
}
public class httpRequest {
@Expose(serialize = true)
String url;
@Expose(serialize = true)
String statusCode;
}
public class traceroute {
@Expose(serialize = true)
String url;
@Expose(serialize = true)
List<String> nodes;
}
然后用数据填充对象; 然后使用gson库将你的Example(父类)对象转换为Json,如下所示
String json = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(expamleClassObject);
使用以下链接使用Android studio
在您的应用中导入gson库compile 'com.google.code.gson:gson:2.3.1'
答案 1 :(得分:1)
如果您想要使用JSON Object
,请尝试这样做try {
JSONObject mainObject = new JSONObject();
JSONArray httpRequest = new JSONArray();
JSONObject httpRequestObject = new JSONObject();
httpRequestObject.put("url", "www.google.com");
httpRequestObject.put("url", "www.google.com");
httpRequest.put(httpRequestObject);
JSONArray traceroute = new JSONArray();
JSONObject tracerouteObject = new JSONObject();
tracerouteObject.put("url", "www.google.com");
JSONArray nodes=new JSONArray();
nodes.put("45.34.222.11");
nodes.put("232.43.54.32");
mainObject.put("speedtest","10Mbit/s");
mainObject.put("httpRequest",httpRequest);
mainObject.put("traceroute",traceroute);
Log.e("json",mainObject.toString());
}catch (Exception e){
}
答案 2 :(得分:0)
与所需的JSON一样,主JSONObject
包含speedtest
和httpRequest
JSONArray
,因此不在httpRequest
添加mainJson
JSONObject添加它在speedData
JSONObject中如下:
speedData.put("httpRequest", ja);
现在使用speedData
作为最终的JSON字符串而不是mainJson
。