【发布时间】:2019-01-13 22:36:46
【问题描述】:
我有一个问题,关于如何从字符串中获取信息的最佳方式是 JSON 格式。
{
"internal_id":"1234",
"moreInformation":"Failed authentication for user."
}
在这种情况下,我想通过 subtring、lastIndexOf 和 indexOf 获取“internal_id”的值
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 解析器,然后获取所选键的值。这使我们避免了当您的 JSON 结构增长并可能包含您正在寻找的值键时您将面临的许多错误(这只是解析器为我们解决的许多可能问题之一)。
-
我会建议使用
gsonlibrary