来自here的原始代码 查看下面的代码(忽略import语句):
public class JsonTest2 {
public static void main(String[] args){
Gson gson = new Gson();
JsonParser jsonParser = new JsonParser();
JsonReader reader = null;
try {
reader = new JsonReader(new InputStreamReader(new
FileInputStream("./twitterUser.json")));
}
catch (IOException e) {
}
JsonArray userArray = jsonParser.parse(reader).getAsJsonArray();
List<TwitterUser> twitterUsers = new ArrayList<TwitterUser>();
//For each element in the JSON array, create a new TwitterUser
//and populate with the json data:
for ( JsonElement aUser : userArray ) {
TwitterUser aTwitterUser =
gson.fromJson(aUser, TwitterUser.class);
twitterUsers.add(aTwitterUser);
}
//For each new TwitterUser that was created, print them out:
for ( TwitterUser tUser : twitterUsers) {
System.out.println(tUser);
}
}
}
创建数组List twitterUsers = new ArrayList();
并包含两个TwitterUser
实例。
如何单独引用每个实例(它们的变量名称是什么)?如果这不可能,例如你只能使用TwitterUser[0]
,我怎样才能使用JSON创建五个对象,每个对象都带有单独的变量名?
也可能需要围绕这个主题进行一些解释......
答案 0 :(得分:1)
List
不是数组。 ArrayList
是由数组支持的List
(您无法直接访问)。而是使用List
接口
List.get(int)
返回此列表中指定位置的元素。 List.iterator()
来迭代List
,也许间接使用for-each
loop。所以,对于第一种情况
TwitterUser tu = twitterUsers.get(0); // <-- get the first TwitterUser
// in the List.
或第二次
for (TwitterUser tu : twitterUsers) {
// do something with each TwitterUser in tu
}
答案 1 :(得分:0)
如何单独引用每个实例
作为twitterUsers[0]
和twitterUsers[1]
。
(他们的变量名是什么)?
它们不是变量,也没有名称。
如果不可能,例如你只能使用TwitterUser [0],我如何使用JSON创建五个对象,每个对象都有各自的变量名?
你做不到。变量命名您在源代码中编写的内容...在编译之前。库类(例如您正在使用的JSON库)只能在运行时...在编译源代码后执行操作。
但是如果你真的想要不同的变量,那么只要你知道 需要多少变量就很容易编写你的代码来做到这一点; e.g。
TwitterUser userOne = twitterUsers[0];
TwitterUser userTwo = twitterUsers[1];
显然,这是假设您将接收的JSON数组中至少有两个元素的布线。
这是个好主意吗?可能不是:
它不会缩放。
如果要填充的变量数不是常数,则代码会变得相当复杂和脆弱。 (您可以将它们初始化为null
,但每次使用变量时都必须处理可能的空值!)
您是通常不应硬接线的硬接线假设。 (至少应该检查JSON数组中的元素数量是否符合您的预期......并将错误的假设视为错误!)
但在某些情况下,它可以使代码更容易阅读;例如如果命名变量(userOne
和userTwo
)将被广泛使用,或者它们具有更多描述性名称。
使用Map而不是变量怎么样?它确实可以扩展(排序),但是当数组中的条目数可变时,您仍然会遇到问题。代码更复杂。