[英]Converting BufferedReader to JSONObject or Map
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.我想从中获取 JSONOBject 或 Map。 I tried converting this into a String and manipulating it.
我尝试将其转换为 String 并对其进行操作。 But it's not that easy to do.
但这并不容易。 Please help.
请帮忙。
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");
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.希望能帮助到你。
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();
使用这个库(org.json)你可以将字符串转换为 json 对象: http : //www.json.org/java/
JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.