无法通过 POST 请求将 JSON 放入数组
Can't get JSON into array from POST request
我正在使用 Unirest 库来解析一些 JSON 我从 MAshape API 得到的东西。我刚开始在 Java 中发出 HTTP 请求,我无法理解错误。
我做的函数是:
public ArrayList<String> httpPost(int year) {
HttpResponse<String> response = null;
try {
response = Unirest.post("https://--------.p.mashape.com/v1/calculate/" + year)
.header("X-Mashape-Key", "--------------------------")
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Accept", "application/json")
//.field("blabla", "blabla")
.field("filing_status", myFS)
.field("pay_periods", myPP)
.field("pay_rate", getGrossPay())
.field("state", myState)
.asString();
} catch (UnirestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// retrieve the parsed JSONObject from the response
JSONObject myObj = new JSONObject(response);
JSONArray results = new JSONArray();
try {
results = myObj.getJSONArray("annual"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> list = new ArrayList<String>();
if (results != null) {
int len = results.length();
for (int i=0;i<len;i++){
try {
list.add(results.get(i).toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;
}
我收到错误:
org.json.JSONException: JSONObject["annual"] not found
所以我把response
这个变量输出到一个文件中,这个文件里面有com.mashape.unirest.http.HttpResponse@161b062a
。我不知道那是从哪里来的。
只是为了检查一下,我使用了 hurl.it 并且我在我的程序中输入的相同响应产生了成功的响应:
{
"annual": {
"state": {
"amount": 68232.65
},
"fica": {
"amount": 91800
},
"federal": {
"amount": 418014.8
}
},
"per_pay_period": {
"state": {
"amount": 5686.05
},
"fica": {
"amount": 7650
},
"federal": {
"amount": 34834.57
}
}
}
我尝试将 response
的类型从 String
更改为 JsonNode
但它没有用,我真的不知道如何使用它。我也添加了所有必需的库。有帮助吗?
使用myObj.getJSONObject("annual");
我正在使用 Unirest 库来解析一些 JSON 我从 MAshape API 得到的东西。我刚开始在 Java 中发出 HTTP 请求,我无法理解错误。
我做的函数是:
public ArrayList<String> httpPost(int year) {
HttpResponse<String> response = null;
try {
response = Unirest.post("https://--------.p.mashape.com/v1/calculate/" + year)
.header("X-Mashape-Key", "--------------------------")
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Accept", "application/json")
//.field("blabla", "blabla")
.field("filing_status", myFS)
.field("pay_periods", myPP)
.field("pay_rate", getGrossPay())
.field("state", myState)
.asString();
} catch (UnirestException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// retrieve the parsed JSONObject from the response
JSONObject myObj = new JSONObject(response);
JSONArray results = new JSONArray();
try {
results = myObj.getJSONArray("annual"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList<String> list = new ArrayList<String>();
if (results != null) {
int len = results.length();
for (int i=0;i<len;i++){
try {
list.add(results.get(i).toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;
}
我收到错误:
org.json.JSONException: JSONObject["annual"] not found
所以我把response
这个变量输出到一个文件中,这个文件里面有com.mashape.unirest.http.HttpResponse@161b062a
。我不知道那是从哪里来的。
只是为了检查一下,我使用了 hurl.it 并且我在我的程序中输入的相同响应产生了成功的响应:
{
"annual": {
"state": {
"amount": 68232.65
},
"fica": {
"amount": 91800
},
"federal": {
"amount": 418014.8
}
},
"per_pay_period": {
"state": {
"amount": 5686.05
},
"fica": {
"amount": 7650
},
"federal": {
"amount": 34834.57
}
}
}
我尝试将 response
的类型从 String
更改为 JsonNode
但它没有用,我真的不知道如何使用它。我也添加了所有必需的库。有帮助吗?
使用myObj.getJSONObject("annual");