使用 JSON 格式 java 获取字符串的特定部分



我有一个问题,关于如何从字符串中获取信息的最佳方式,但该字符串具有 JSON 格式。

{
"internal_id":"1234",
"moreInformation":"Failed authentication for user."
}

在这种情况下,我想获取"internal_id"的值,我已经这样做了,减法,lastIndexOf 和 indexOf

public static String returnInternalCode(String json){
    String internalCode = json.substring(json.lastIndexOf(""internal_id":"") + ""internal_id":"".length(), json.length() - 1);
    if (json.lastIndexOf(""internal_id":"") == -1) return null;
    return internalCode.substring(0, internalCode.indexOf("""));
}

我还尝试了几个没有数据的顺序更改的 JSON,它也有效。我离开了我所做的完整类测试:

public class Test {
    public static void main(String[] args) {
        // Original JSON
        String json = "{"internal_id":"999999","moreInformation":"Failed authentication for user, 1 authentication attempt remaining."}";
        // Other JSON order
        String json2 = "{"moreInformation":"Failed authentication for user. Invalid response.", "moreInformation2":"Failed authentication for user. ", "internal_id":"45678"}";
        // JSON without the internal_id
        String json3 = "{"moreInformation":"Failed authentication for user. Invalid response."}";
        // JSON without moreInformation
        String json4 = "{"internal_id":"999999"}";
        System.out.println("JSON: ".concat(json4));
        System.out.println("internalId: " + returnInternalId(json4));
        System.out.println("moreInformation: " + returnMoreInformation(json4));
    }
    public static String returnInternalId(String json){
        String internalCode = json.substring(json.lastIndexOf(""internal_id":"") + ""internal_id":"".length(), json.length());
        if (json.lastIndexOf(""internal_id":"") == -1) return null;
        return internalCode.substring(0, internalCode.indexOf("""));
    }
    public static String returnMoreInformation(String json){
        String moreInformation = (json.substring(json.lastIndexOf(""moreInformation":"") + ""moreInformation":"".length(), json.length()));
        if (json.lastIndexOf(""moreInformation":"") == -1) return null;
        return moreInformation.substring(0, moreInformation.indexOf("""));
    }
}

想知道是否有更好的方法来做我所做的事情,例如使用 StringBuilder 或 StringBuffer,并找出哪种方式使用更少的内存或运行速度更快,我怎么知道?执行一个方法需要多长时间?

谢谢!

您可以通过这种方式提取值;使用简单 json 库

    JSONObject jobj = (JSONObject) parser.parse(yourJsonString); // Pass the Json formatted String
    String internal_id = (String) jobj.get("internal_id"); // Extract the value from your key
    System.out.println(internal_id); // 1234