在java中检索嵌套json中的所有键

2023-12-06

这是我写的程序:

    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.StringTokenizer;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;

/**
 *
 * @author 311001
 */
public class NewClass {

    public static void main(String args[]) {
        JSONObject parentData = new JSONObject();
        JSONObject childData = new JSONObject();
        try {

            parentData.put("command", "login");
            parentData.put("uid", "123123123");
            childData.put("uid", "007");
            childData.put("username", "sup");
            childData.put("password", "bros");
            parentData.put("params", childData);
            System.out.println(parentData);

            Map<String, String> map = new HashMap<>();
            Iterator<?> iter = parentData.keys();
            while (iter.hasNext()) {
                String key = (String) iter.next();
                String value = parentData.getString(key);
                map.put(key, value);
            }

            for (Entry<String, String> entry : map.entrySet()) {
                System.out.println("key > " + entry.getKey() + "  : value = " + entry.getValue());
            }

            String testData = map.get("params.uid");
            System.out.println(testData);
            System.out.println("Tokenizing json");
            String resultStr = parentData.toString();
            System.out.println("String tokens ");
            StringTokenizer st = new StringTokenizer(resultStr);
            System.out.println(st.countTokens());
            while (st.hasMoreTokens()) {
                System.out.println(st.nextToken());
            }
            String testDat="abc :: result";
            StringTokenizer simpleString = new StringTokenizer(testDat);
            System.out.println("Tokenizing simple string");
            System.out.println(simpleString.countTokens());
            while (simpleString.hasMoreTokens()) {
                System.out.println(simpleString.nextToken());
            }


        } catch (JSONException e) {
            e.printStackTrace();
        }


    }
}

我得到的输出:

run:
{"command":"login","uid":"123123123","params":{"uid":"007","username":"sup","password":"bros"}}
key > uid  : value = 123123123
key > command  : value = login
key > params  : value = {"uid":"007","username":"sup","password":"bros"}
null
Tokenizing json
String tokens 
1
{"command":"login","uid":"123123123","params":{"uid":"007","username":"sup","password":"bros"}}
Tokenizing simple string
3
abc
::
result
BUILD SUCCESSFUL (total time: 0 seconds)

如何接收 json 对象中的所有键。如果我标记,为什么我只得到一个字符串标记,而对于一个简单的字符串,我得到正确的输出 3 个标记。


您可以递归遍历 JsonObject 来获取所有键。 这是伪代码

findKeys(JsonObject obj,List keys){
List<String>keysFromObj=obj.keys();
keys.addAll(keysFromObj);
for(String key:keysFromObj){
    if(obj.get(key).getClass()==JSONObject.class){
         findKeys(obj.get(key),keys);
         }
    }
}

因此,假设您的对象是 {"a":1,"b":{"c":"hello","d":4.0}} 上面的函数应该给你 ["a","b","c","d"]

但是如果你只想 ["a","c","d"] 作为输出,你可以写-

findKeys(JsonObject obj,List keys){
List<String>keysFromObj=obj.keys();

for(String key:keysFromObj){
    if(obj.get(key).getClass()==JSONObject.class){
         findKeys(obj.get(key),keys);
         }else{
         keys.add(key);
         }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java中检索嵌套json中的所有键 的相关文章

  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程

随机推荐

  • 如何修复此编译器错误“格式不是字符串文字且没有格式参数”

    我有编译器错误 libvncserver main c 245 error format not a string literal and no format arguments 第 245 行是 fprintf stderr buf 其中
  • 如何计算 python 引发了多少个异常

    我想找出引发异常的数量并将其与 if 语句一起使用 更清楚地说 如果连续引发超过 10 个 TimeoutException 则打印 网站存在问题 我搜索过 但什么也没找到 我希望有一种有效的方法来做到这一点 这是代码 while True
  • Strapi v4 抛出 cors 异常

    我是 Strapi 的新手 我已经下载了 Strapi v4 并且我使用 vue js 作为前端 现在我创建了类别 并尝试使用我的 vue 应用程序获取这些类别 但出现了 cors 错误 Access to XMLHttpRequest a
  • 箭头函数语法不适用于 webpack?

    我正在react redux 上制作一个应用程序 我使用 webpack 进行捆绑 使用 babel 进行转译 当我尝试在代码中使用箭头函数时 它给我的错误是 Module build failed SyntaxError Unexpect
  • NoSuchBeanDefinitionException:没有可用的“org.springframework.security.config.annotation.web.builders.HttpSecurity”类型的合格 bean

    我正在尝试使用 Spring Boot 设置基本身份验证 但在启动时不断收到此错误 我见过几个例子 它们的代码几乎与我这里的代码完全相同 但我不知道我做错了什么 我从 Spring 的文档中复制了代码 只做了一些小的调整 我对 Spring
  • Target='_blank' 在新窗口中显示,而不是在新选项卡中显示,可能吗?

    我怎样才能做到这一点 在 Firefox 中 链接会在新选项卡中打开 我不希望用户必须为此设置浏览器的设置 我希望每当用户单击主页上的 联系 时都会出现一个带有联系表单的弹出窗口 我该怎么做 您无法控制这一点 这完全由用户代理自行决定 毕竟
  • 为什么 `finally: return` 不传播未处理的异常? [复制]

    这个问题在这里已经有答案了 为什么该函数不引发异常 显然是没被抓到 def f try raise Exception finally return ok print f ok 这在中明确解释了文档 如果任一子句发生异常且未处理 则暂时保存
  • CUDA - memcpy2d - 错误的音高

    我刚刚开始 CUDA 编程 并尝试执行下面所示的代码 这个想法是将一个二维数组复制到设备 计算所有元素的总和 然后检索总和 我知道这个算法不是并行的 事实上 它正在做更多的工作 然后是必要的 然而 这只是有意的作为内存复制的练习 inclu
  • 每页一个样式表! [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我有一个新设计的想法 但基本上 它是最后一个设计的扩展 版本 并且最后一个设计的 CSS 文件有 2096 行长 这是常见 正常吗 无论如何 我想这个新设计是非常独特的 因为我以前在其他地
  • 未检测到 SDL 按键事件

    我完全困惑为什么这段代码没有得到任何 SDL 按键事件 其他 SDL 事件 为清楚起见已删除 工作正常 它不适用于我的 XP 或 Vista 机器 没有编译 链接错误 只是从未收到 keydown 事件 include SDL SDL h
  • 为什么每次子程序调用时计数器变量都会意外增加? [复制]

    这个问题在这里已经有答案了 社论 我读过这个问题但是 虽然事后看来 它最终的相关性与这里每个问题的相关性相同 即 为什么计算机会出现故障 这个答案并不是我问题的答案 这个问题是问为什么标准机构在该语言中设计了特定功能 而且 答案并没有回答我
  • 将 org.w3c.dom.Document 漂亮地打印到标准输出的最短方法是什么?

    漂亮打印 也称为格式化 的最简单方法是什么org w3c dom Document到标准输出 Call printDocument doc System out 该方法如下所示 public static void printDocumen
  • 在 Android 应用程序上设置全局菜单

    复制 静态选项菜单 大家好 我知道如何在我的应用程序中创建一个菜单 并在菜单的每个 按钮 上添加图标和文本 但此菜单仅在我创建它的活动中可见 我想知道是否可以创建一个可从所有活动访问的全局菜单 谢谢 我想知道是否可以 创建一个全局菜单 可以
  • 使用 hibernate + spring mvc 获取自动生成的密钥,保存时

    我在用Spring MVC 休眠 Resource name sessionFactory private SessionFactory sessionFactory save public
  • 删除数组中重复的字符串

    我是 C 新手 我正在寻找一种从字符串数组中删除重复字符串的方法 如下所示 string exempleArray string1 string2 string1 代码之后应该如下所示 string1 string2 但顺序根本不重要 非常
  • 捕获“X-Frame-Options 禁止显示”[重复]

    这个问题在这里已经有答案了 我知道这个错误是无法克服的 但我想做的是 当我遇到无法嵌入的页面时 该页面只是作为弹出窗口加载 目前发生的情况是我被重定向到该页面 对于无法嵌入的页面 我在 Chrome 中看到以下错误 Refused to d
  • 在 JavaScript 中多次使用展开运算符?

    为什么扩展运算符不能多次使用 let arr 1 2 3 console log arr Array Array 1 console log arr Array Array 3 console log arr SyntaxError exp
  • 为什么我可以创建一个父类类型的变量

    当我上这些课时 public class Master public String test return I am the master object public String boeh return Only inside maste
  • ruby while 循环转换为 haskell

    我刚刚开始学习一些 Haskell 和函数式编程 但我发现很难掌握它 我正在尝试翻译一小段rubyHaskell 的代码 因为我喜欢函数式编程和 Haskell 提出的概念 更因为我来自数学领域 Haskell 看起来非常数学化 class
  • 在java中检索嵌套json中的所有键

    这是我写的程序 To change this template choose Tools Templates and open the template in the editor package javaapplication1 impo