XML到JSON getJSONArray()问题

时间:2017-03-30 14:33:53

标签: java json xml

我从URL读取XML如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import java.util.Base64;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.json.JSONObject;
import org.json.XML;


public class WebGet {

public static void disableCertificateValidation() throws MalformedURLException, IOException, NoSuchAlgorithmException, KeyManagementException {
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }

        public void checkServerTrusted(X509Certificate[] certs, String authType) {
        }
    }
    };

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    // Install the all-trusting trust manager
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

    String credentials = "user" + ":" + "psw";
    String encoding = Base64.getEncoder().encodeToString(credentials.getBytes("UTF-8"));
    URL url = new URL("someURL");
    URLConnection con = url.openConnection();
    con.setRequestProperty("Authorization", String.format("Basic %s", encoding));
    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    StringBuilder sb = new StringBuilder();
    String apiResponse = "";
    while ((apiResponse = br.readLine()) != null) {
        sb.append(apiResponse);
    }

    System.out.println(sb);
    JSONObject jsonObj = XML.toJSONObject(sb.toString());
    System.out.println("---------------------------");
    System.out.println(jsonObj);
    jsonObj.getJSONArray("devices");

}

public static void main(String[] args){
    disableCertificateValidation();
}
}

除了" jsonObj.getJSONArray(" devices")之外,所有内容都打印并正常工作;"抛出以下异常:

  

线程中的异常" main" org.json.JSONException:JSONObject [" devices"]不是JSONArray。       在org.json.JSONObject.getJSONArray(JSONObject.java:622)

我的输出显示在这里:

{" devices":{     "总计":71,     "伯爵":71,     "设备":[         {             " domain_id":1,             "离线":false,             " domain_name":"默认",             "供应商":"思科",             "拓扑":是的,             " ip":" 22.201.120.101",             " name":" eagnmn-red-rdmvpn",             " model":" asa",             " id":55         },         {             " domain_id":1,             "离线":false,             " domain_name":"默认",             "供应商":"思科",             "拓扑":是的,             " ip":" 22.201.120.51",             " name":" eagnmn-red-ras",             " model":" asa",             " id":54         },

我哪里错了?

1 个答案:

答案 0 :(得分:0)

你需要使用

JSONArray deviceArray = jsonObj.getJSONObject("devices").getJSONArray("device")

因为您的对象包含devices JSONObject,其中还包含device JSONArray