使用某些结构创建JSON结果

时间:2016-05-03 08:39:03

标签: android json

我正在开发一个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的一部分,现在我不知道如何合并它

3 个答案:

答案 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包含speedtesthttpRequest JSONArray,因此不在httpRequest添加mainJson JSONObject添加它在speedData JSONObject中如下:

 speedData.put("httpRequest", ja);

现在使用speedData作为最终的JSON字符串而不是mainJson