我想知道使用JSONObject和JSONTokener解析JSON字符串有什么区别。我看到过使用这些类中的任何一个来解析JSON字符串的例子。例如,我像这样解析了一个JSON字符串:
JSONObject object = (JSONObject) new JSONTokener(jsonString).nextValue();
return object.getJSONObject("data").getJSONArray("translations").
getJSONObject(0).getString("translatedText");
但我也看到了一些例子,他们简单地使用JSONObject类(不使用JSONTokener)来解析它:
String in;
JSONObject reader = new JSONObject(in);
JSONObject sys = reader.getJSONObject("sys");
country = sys.getString("country");
我读了这个page的描述,但仍然没有真正得到的区别。一个比另一个性能更好吗?什么时候应该使用JSONTokener?
谢谢!
2条答案
按热度按时间lyfkaqu11#
当我读到提到的文件时,我也有同样的问题。在搜索时,我发现了这个,https://stackoverflow.com/a/27457728
通常不需要直接使用JSONTokener类。这实际上只是JSONObject的一个Helper类。
这里还有https://stleary.github.io/JSON-java/org/json/JSONTokener.html
JSONTokener获取源字符串并从中提取字符和标记。JSONObject和JSONArray构造函数使用它来解析JSON源字符串。
所以我检查了源代码https://android.googlesource.com/platform/dalvik/+/f2f7880a40aed1c8d9c27db49226e47396556aac/libcore/json/src/main/java/org/json/JSONObject.java
因此,* JSONTokener * 在两种情况下都用于解析字符串值。但是使用哪个类取决于你想做什么。* JSONTokener * 中还有一些函数,例如 * nextTo(不包括:Char), skipPast(通过:String!), skipTo(to:char)* etc只解析必需的值。
gfttwv5a2#
JSONTokener类允许应用程序将字符串分解为标记。JSONObject和JSONArray构造函数可以使用它来解析JSON源字符串。JSONTokener类的几个重要方法是back()-将光标向后移动一个位置,more()-如果标记有元素则返回true,否则返回false,next()-返回当前位置旁边的字符,nextTo(character)-返回字符串,直到给定字符匹配。
语法:-public class JSONTokener extends java.lang.Object