Java 将字符串解析为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\",\"

我正在用org.JSON中的libs解析这个JSON字符串,我不明白为什么要将下面的输出输入到日志中

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
,那么对于您的情况,对于每一个都是最好的解决方案。如果您认为可读性方面的改进是值得的,您可以将
键添加到
集合
,这是一个
可编辑的

相关问题