Java 将字符串解析为JSON
我正在用org.JSON中的libs解析这个JSON字符串,我不明白为什么要将下面的输出输入到日志中Java 将字符串解析为JSON,java,json,loops,parsing,iterator,Java,Json,Loops,Parsing,Iterator,我正在用org.JSON中的libs解析这个JSON字符串,我不明白为什么要将下面的输出输入到日志中 ArrayList<String> al = new ArrayList<String>(); JSONObject demo = new JSONObject("{\"00408C88A2E6\":{\"id\":\"00408C88A2E6\",\"name\":\"Lab\"},\"00408C91188B\":{\"id\":\"00408C91188B\",\"
ArrayList<String> al = new ArrayList<String>();
JSONObject demo = new JSONObject("{\"00408C88A2E6\":{\"id\":\"00408C88A2E6\",\"name\":\"Lab\"},\"00408C91188B\":{\"id\":\"00408C91188B\",\"name\":\"Lab1\"},\"00408C944B99\":{\"id\":\"00408C944B99\",\"name\":\"Lato1\"},\"00408C944BA0\":{\"id\":\"00408C944BA0\",\"name\":\"Lato\"}}");
Iterator<String> iterator = demo.keys();
while (iterator.hasNext() ){
al.add((String)iterator.next());
Log.i(LOG_TAG, "size al into while " + al.size());
Log.i(LOG_TAG, "MAC " + iterator.next() + " for the user " + userId);
}
我的ArrayList中不应该有4个元素?
感谢您在循环体中调用了两次
iterator.next()
。每次执行此操作时,迭代器都会向前推进
您可能希望在正文中调用它一次,并将其存储在局部变量中
String next = iterator.next();
al.add(next);
Log.i(LOG_TAG, "MAC " + next + " for the user " + userId);
请注意,Iterator
定义了E next()
,因此在本例中不需要转换为字符串
另一个说明性的例子
下面是一个例子:
这是人们在尝试做这些事情时常犯的一个错误
对两个集合进行迭代:
List suits = ...;
List ranks = ...;
List sortedDeck = new ArrayList();
// BROKEN - throws NoSuchElementException!
for (Iterator i = suits.iterator(); i.hasNext(); )
for (Iterator j = ranks.iterator(); j.hasNext(); )
sortedDeck.add(new Card(i.next(), j.next()));
你能发现虫子吗?如果你不能,不要难过。许多专家程序员
我曾经犯过这样那样的错误。问题是下一个
方法在“外部”集合(suits)上被调用的次数太多。信息技术
正在外部集合和内部集合的内部循环中调用,
这是错误的。为了修复它,您必须在
固定西装的外环的范围:
// Fixed, though a bit ugly
for (Iterator i = suits.iterator(); i.hasNext(); ) {
Suit suit = (Suit) i.next();
for (Iterator j = ranks.iterator(); j.hasNext(); )
sortedDeck.add(new Card(suit, j.next()));
}
那个么,所有这些和for每个构造有什么关系呢?这是为你量身定做的
嵌套迭代!赏心悦目:
for (Suit suit : suits)
for (Rank rank : ranks)
sortedDeck.add(new Card(suit, rank));
曾经是一个Iterable
而不是Iterator
,那么对于您的情况,对于每一个都是最好的解决方案。如果您认为可读性方面的改进是值得的,您可以将键添加到集合
,这是一个可编辑的
相关问题
您在循环体中调用了两次iterator.next()
。每次执行此操作时,迭代器都会向前推进
您可能希望在正文中调用它一次,并将其存储在局部变量中
String next = iterator.next();
al.add(next);
Log.i(LOG_TAG, "MAC " + next + " for the user " + userId);
请注意,Iterator
定义了E next()
,因此在本例中不需要转换为字符串
另一个说明性的例子
下面是一个例子:
这是人们在尝试做这些事情时常犯的一个错误
对两个集合进行迭代:
List suits = ...;
List ranks = ...;
List sortedDeck = new ArrayList();
// BROKEN - throws NoSuchElementException!
for (Iterator i = suits.iterator(); i.hasNext(); )
for (Iterator j = ranks.iterator(); j.hasNext(); )
sortedDeck.add(new Card(i.next(), j.next()));
你能发现虫子吗?如果你不能,不要难过。许多专家程序员
我曾经犯过这样那样的错误。问题是下一个
方法在“外部”集合(suits)上被调用的次数太多。信息技术
正在外部集合和内部集合的内部循环中调用,
这是错误的。为了修复它,您必须在
固定西装的外环的范围:
// Fixed, though a bit ugly
for (Iterator i = suits.iterator(); i.hasNext(); ) {
Suit suit = (Suit) i.next();
for (Iterator j = ranks.iterator(); j.hasNext(); )
sortedDeck.add(new Card(suit, j.next()));
}
那个么,所有这些和for每个构造有什么关系呢?这是为你量身定做的
嵌套迭代!赏心悦目:
for (Suit suit : suits)
for (Rank rank : ranks)
sortedDeck.add(new Card(suit, rank));
曾经是一个Iterable
而不是Iterator
,那么对于您的情况,对于每一个都是最好的解决方案。如果您认为可读性方面的改进是值得的,您可以将键添加到集合
,这是一个可编辑的
相关问题