Java 将 BufferedReader 转换为 JSONObject 或 Map

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26358684/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 02:20:54  来源:igfitidea点击:

Converting BufferedReader to JSONObject or Map

javajsonmaphttprequest

提问by Sanura Hettiarachchi

My code sends a GET request to a server,

我的代码向服务器发送 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()));

I get a BufferedReader object that prints,

我得到一个打印的 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"    
   ]
}

I want to get a JSONOBject or a Map from this. I tried converting this into a String and manipulating it. But it's not that easy to do. Please help.

我想从中获取 JSONOBject 或 Map。我尝试将其转换为 String 并对其进行操作。但这并不容易。请帮忙。

采纳答案by Emanuel S

First do it as string. you can use custom librarys for that like

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

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

or a StringBuilder

或 StringBuilder

    StringBuilder sb = new StringBuilder();

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

Then you can parse it. Since it's an object because of the "{" (array begin and ends with []) you need to create an JSONObject.

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

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

then you can access your elements with

然后你可以访问你的元素

//{ "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");

or the array with

或数组

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

or you use the method getJSONArray()

或者您使用方法 getJSONArray()

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

回答by Sandro Machado

Using this lib (org.json) you can convert strings to json objects: http://www.json.org/java/

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

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

回答by Milad Faridnia

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);     
            }       
    }
}

Hope it helps.

希望能帮助到你。

回答by Jules

And what about this:

这又如何呢:

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

回答by jzheaux

In more recent versions of org.json, you can do:

在 的更新版本中org.json,您可以执行以下操作:

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

As a quick proof, this works with org.json:json:20190722:

作为快速证明,这适用于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);