从JSON / String文件获取特定的JSON属性

时间:2018-08-12 08:57:27

标签: java json

我正在向服务器发送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;

谢谢。

1 个答案:

答案 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。

希望这会有所帮助。

谢谢。