我正在向服务器发送POST请求。服务器使用以下(JSON)响应:
{"data":[
{
"password":"1234578566",
"status":"processing"
}
],
"status":200
}
这是我的POST方法:
public static void sendPostRequest(String conversion) throws IOException, AuthenticationException {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://url.com");
httpPost.setEntity(new StringEntity(conversion));
UsernamePasswordCredentials credentials =
new UsernamePasswordCredentials("username", "password");
httpPost.addHeader(new BasicScheme().authenticate(credentials, httpPost, null));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse response = client.execute(httpPost);
String data = EntityUtils.toString(response.getEntity());
client.close();
// System.out.println(data);
}
请注意,字符串“ data”是服务器返回上面的JSON数据。现在,我正在尝试从数据中获取密码属性。
public static void getValue(String data) throws ParseException {
JSONObject object = (JSONObject) new JSONParser().parse(data);
JSONArray array = (JSONArray) object.get("data");
JSONObject attribute = (JSONObject) array.get(0);
JSONObject userData = (JSONObject) attribute.get("password");
String result = userData.toString();
System.out.println(result);
}
Exception in thread "main" Unexpected character (T) at position 0.
at org.json.simple.parser.Yylex.yylex(Unknown Source)
at org.json.simple.parser.JSONParser.nextToken(Unknown Source)
at org.json.simple.parser.JSONParser.parse(Unknown Source)
at org.json.simple.parser.JSONParser.parse(Unknown Source)
at org.json.simple.parser.JSONParser.parse(Unknown Source)
我遇到了这个例外,但是我想知道为什么吗?曾尝试到处改变,但没有成功。
这些是我的进口货
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser;
谢谢。
答案 0 :(得分:1)
看起来您解析的响应不正确。这里有两件事要做。
1)确保从响应中正确获取JSON数据。您可以点击此链接Get a JSON object from a HTTP response,以从响应中获取字符串化的JSON数据。
2)使用JSON来获取特定的值。您的getValue()
方法可以用于此目的,而无需进行任何修改。我对您的方法进行了一些更改,这是相同方法的更新代码:
public static void getValue(String data) {
try {
JSONObject responseObject = new JSONObject(data);
JSONArray jsonArray = (JSONArray) responseObject.get("data");
JSONObject jsonObject = (JSONObject) jsonArray.get(0);
String result = jsonObject.getString("password");
System.out.println(result);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我已经用您的数据对其进行了测试,并且按预期工作,并在控制台上打印了1234578566。
注意:我在这里使用了org.json lib而不是简单的json。
希望这会有所帮助。
谢谢。