java - 使用 java 从动态 json 中查找键的值

标签 java json search

我需要从动态 json 中获取 key 的值。
Input-> json Object, String key
输出->json元素(对应key的值)
例子

JsonObject Jmsg =

{
  "id": "1753_CORE1",
  "name": "Gtx cuda Service:1753",
  "shortName": "gt-service-1753",
  "createdDate": "Mar 31, 2015 4:47:10 PM",
  "config": {
    "oauthSecret": [
      {
        "id": 45,
        "config123": {
          "oauthSecret": "P8n2x5Hsst0nFRRB0A",
          "status": "CREATED"
        },
        "SERVER132": "1000"
      },
      {
        "id": 46,
        "config123": {
          "oauthSecret": "P8n2x5Htss0nFRRB0A"
        },
        "SERVER132": "1000"
      }
    ],
    "oauthKey": "154284-service-1753",
    "SERVER": "1000"
  },
  "features": [
    9004,
    9005
  ]
}

和 String key = "status";
然后 JsonElement Jvalue = jsonGetValueformKey(Jmsg,key);
应以 JsonElement 或字符串类型返回 'CREATED'。

如果 String key = "features";
然后
JsonElement Jvalue = jsonGetValueformKey(Jmsg,key);
应该以 JsonElement 或 jsonArray 类型返回 [9004,9005]。

如果找不到key则返回null
JsonObject Jmsg 可以是任何东西

最佳答案

请试试这个

package json;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class MyApp {
    static List<String> list = new ArrayList<String>();
    public static void main(String[] args) {

        String key = "oauthSecret";

        String json2 = "{\"config\": {\"oauthSecret\": [{\"id\": 45,\"config123\": {\"oauthSecret\": \"P8n2x5Ht0nFRRB0A\",\"status\": \"CREATED\"},\"SERVER132\": \"1000\"},{\"id\": 46,\"config123\": {\"oauthSecret\": \"wP8n2x5Ht0nFRRB0A\",\"status\": \"CREATED\"},\"SERVER132\": \"1000\"}],\"oauthKey\": \"newtest\",\"SERVER\": \"1000\"},\"features\": [ 9004, 9005] ,\"d\":\"dd\"}";

        System.out.println("JSON: " + json2);
        JsonParser p = new JsonParser();
        check(key, p.parse(json2));
        System.out.println("list size: " + list.size());
        System.out.println(list);
    }



    private static void check(String key, JsonElement jsonElement) {

        if (jsonElement.isJsonArray()) {
            for (JsonElement jsonElement1 : jsonElement.getAsJsonArray()) {
                check(key, jsonElement1);
            }
        } else {
            if (jsonElement.isJsonObject()) {
                Set<Map.Entry<String, JsonElement>> entrySet = jsonElement
                        .getAsJsonObject().entrySet();
                for (Map.Entry<String, JsonElement> entry : entrySet) {
                    String key1 = entry.getKey();
                    if (key1.equals(key)) {
                        list.add(entry.getValue().toString());
                    }
                    check(key, entry.getValue());
                }
            } else {
                if (jsonElement.toString().equals(key)) {
                    list.add(jsonElement.toString());
                }
            }
        }
    }

}

关于java - 使用 java 从动态 json 中查找键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157781/

相关文章:

java - Grails标记actionSubmit导致404错误

java - 如何调用Method Invoke——反射

c# - 没有 MediaTypeFormatter 可用于从媒体类型为 'String' 的内容中读取类型为 'text/plain' 的对象

php - 使用 PHP 将 JSON 对象中的元素插入数据库

c# - 具有特定元素的 ASP 控件的 RegEx 搜索模式

search - 数据库中的全文本搜索

java - Google Sheet API V4(Java) 在单元格中附加日期

java - 如何解决具有许多对象和属性的 Json 数组响应?

java - Lucene:按字段的值长度搜索/过滤

java - Selenium 中的线程 "main"java.lang.NullPointerException 中出现异常