【问题标题】:How do I loop (for/while/loop) on a Map.Entry如何在 Map.Entry 上循环(for/while/loop)
【发布时间】:2024-01-17 03:05:01
【问题描述】:

我有一个带有 jSON 的 Map.Entry 值,我想将此值设为 Map

使用示例将更容易解释: 我正在向这样的 URL 发出 api 请求:

response1 = httpclient.execute(httpGet);

这是我从请求中得到的 JSON:

{"Projects":
  [{"Role":"ProjectAdmin","Url":"http://**/","OverSized":false,"Folders":      
     [{"Name":"sh","Url":"http://**/","Permssion":"rw"}]},
   {"Role":"ProjectAdmin","Url":"http://**/Goooood","OverSized":false,"Folders":     
     [{"Name":"Goooood","Url":"http://**/Goooood","Permssion":"rw"}]}],
 "DeviceToken":"token",
 "TotalProjects":2}

这就是我将得到的 JSON 转换为 MAP 的方式:

ContainerFactory containerFactory = new ContainerFactory()
{
  public List creatArrayContainer() {return new LinkedList();}
  public Map createObjectContainer() {return new LinkedHashMap();}
};
BufferedReader br = new BufferedReader(new InputStreamReader(response1.getEntity().getContent()));
StringBuilder content = new StringBuilder();
String line;
//TODO:Remove and build a better JSON parser
while (null != (line = br.readLine()))
{
   content.append(line);
}
JSONParser parser = new JSONParser();    
try
{
  json = (Map)parser.parse(content.toString(), containerFactory);
  Iterator iter = json.entrySet().iterator();
}

现在一切都很好! 现在我可以在iter 上做一会儿 像这样:

while(iter.hasNext())
{
   Map.Entry entry = (Map.Entry)iter.next();
   System.out.println(entry.getKey() + "=>" + entry.getValue());
}

现在我的问题是我有一个 entry.getValue() 里面有 json。

例子:

   [{"Role":"ProjectAdmin","Url":"http://**/","OverSized":false,"Folders":      
     [{"Name":"sh","Url":"http://**/","Permssion":"rw"}]},
   {"Role":"ProjectAdmin","Url":"http://**/Goooood","OverSized":false,"Folders":     
     [{"Name":"Goooood","Url":"http://**/Goooood","Permssion":"rw"}]}]

我需要像从响应中那样制作一个 Map 才能循环它。 有没有办法做到这一点 ? 有什么方法可以做到吗?

我不认为像一开始那样将它变成一个字符串并重新映射它是一个问题,但我觉得有更好的方法。

谢谢!

【问题讨论】:

  • 你怎么知道它是一个json而不是一个普通的字符串值?用钥匙?也许这有帮助:json.org/java
  • 是的。这是我的 api 服务器

标签: java json map


【解决方案1】:

尝试根据您的对象映射此代码

 Iterator<Entry<Long, String>> it = 
   yourMap.entrySet().iterator();
    while (it.hasNext()) {
    Map.Entry<Long, String> pairs = (Map.Entry<Long, String>) it.next();
        bw.write(pairs.getValue());
    }

希望这会有所帮助。

【讨论】:

  • 我需要的是yourMap 将是Map.Entry。而且 Map.Entry 没有 entrySet...
  • 当我定义这张地图时就像Map&lt;Long, String&gt;你能分享你是如何定义你的地图的
  • 正如你所说,我认为你已经在地图中定义了地图......:O