【问题标题】:Converting BufferedReader to JSONObject or Map将 BufferedReader 转换为 JSONObject 或 Map
【发布时间】:2014-12-09 02:54:56
【问题描述】:

我的代码向服务器发送 GET 请求,

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("GET");
    con.setRequestProperty("User-Agent", USER_AGENT); 
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));

我得到一个打印的 BufferedReader 对象,

{  
   "status": "ERROR",    
   "errorCode": "MISSING_PARAMS",    
   "errorMessage": null,    
   "requestId": "20141014181739_11625805172",    
   "downstreamModuleErrorCode": null,    
   "object": [        
     "activity_code",        
     "activity_name",
     "points",
     "frequency",
     "strategy",
     "vsa_app_access_token"    
   ]
}

我想从中获取 JSONOBject 或 Map。我尝试将其转换为字符串并对其进行操作。但这并不是那么容易做到的。请帮忙。

【问题讨论】:

  • 检查我的答案。它的解释和工作。
  • 我使用了这个图书馆,docs.oracle.com/javaee/7/api/javax/json 你可以这样做:JsonReader jsonReader = Json.createReader(new StringReader(in.toString())); JsonObject jsonObj=jsonReader.readObject();
  • java se 项目中的 javaee 库?尝试使用适合您需求的适当库,例如我上面写的那个

标签: java json map httprequest


【解决方案1】:

在org.json 的更新版本中,您可以:

JSONTokener tokener = new JSONTokener(bufferedReader);
JSONObject json = new JSONObject(tokener);

作为一个快速证明,这适用于org.json:json:20190722:

byte[] b = "{ \"active\" : true }".getBytes(StandardCharsets.UTF_8);
InputStream is = new ByteArrayInputStream(b);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
JSONTokener tokener = new JSONTokener(bufferedReader);
JSONObject json = new JSONObject(tokener);

【讨论】:

    【解决方案2】:

    那么这个呢:

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    JsonReader reader = Json.createReader(in);
    JsonObject object = reader.readObject();
    String s = object.toString();
    

    【讨论】:

    【解决方案3】:

    首先将其作为字符串。您可以为此使用自定义库

     String message = org.apache.commons.io.IOUtils.toString(rd);
    

    或 StringBuilder

        StringBuilder sb = new StringBuilder();
    
        String line;
        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    

    然后你就可以解析它了。由于它是一个对象,因为“{”(数组以 [] 开头和结尾)您需要创建一个 JSONObject。

    JSONObject json = new JSONObject(sb.toString());
    

    然后你可以访问你的元素

    //{ "status": "ERROR", "errorCode": "MISSING_PARAMS", "errorMessage": null, "requestId": "20141014181739_11625805172", "downstreamModuleErrorCode": null, "object": [ "activity_code", "activity_name", "points", "frequency", "strategy", "vsa_app_access_token" ]}
    
    json.getString("status");
    

    或数组

    JSONArray jsonArray = new JSONArray(json.getString("object"));
    

    或者你使用getJSONArray()方法

    JSONArray jsonArray = json.getJSONArray("object");
    

    【讨论】:

    【解决方案4】:
    InputStream inputStream = connection.getInputStream();
    
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder builder = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            builder.append(line + "\n");
            }
    
    JSONArray jsonArray = new JSONArray(builder.toString());
    for (int i = 0; i < jsonArray.length(); i++) {
         JSONObject json = jsonArray.getJSONObject(i);
    
        if (!json.get("object").equals(null)) {
            JSONArray objectJsonArray = json.getJSONArray("object");
                for (int i = 0; i < objectJsonArray.length(); i++) {
                    JSONObject json = objectJsonArray.getJSONObject(i);     
                }       
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • 为什么要复制粘贴不适合解决方案的代码?
    【解决方案5】:

    使用此库 (org.json),您可以将字符串转换为 json 对象:http://www.json.org/java/

    JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2011-07-09
      • 1970-01-01
      • 2017-09-01
      • 2016-06-05
      相关资源
      最近更新 更多