Java 从json对象提取特定数据并将其存储在列表中

Java 从json对象提取特定数据并将其存储在列表中,java,json,groovy,devops,bitbucket-api,Java,Json,Groovy,Devops,Bitbucket Api,我是json格式的新手。我将Json信息存储在Json对象中,我只想提取列表中的名称键值。至少我有一个用户,有时不止一个用户。使用Java或Groovy进行提取 { "reviewers": [ { "user": { "name": "name1.n1", "emailAddress": "example@example.com&

我是json格式的新手。我将Json信息存储在Json对象中,我只想提取列表中的名称键值。至少我有一个用户,有时不止一个用户。使用Java或Groovy进行提取

{
  "reviewers": [
    {
      "user": {
        "name": "name1.n1",
        "emailAddress": "example@example.com"
      },
      "role": "REVIEWER"
    },
    {
      "user": {
        "name": "name2.n2",
        "emailAddress": "example2@example.com"
      },
      "role": "REVIEWER"
    }
  ]
}

将Java与库org.json.JSONObject一起使用

   JSONObject json =new JSONObject(YOUR_JSON_HERE );        
            JSONArray array = json.getJSONArray("reviewers" );
            for(int i=0;i<array.length();i++){
                JSONObject user =array.getJSONObject(i);   
                System.out.println(user.getJSONObject("user").get("name"));
            }
            
    
        }
JSONObject json=新的JSONObject(这里是您的json);
JSONArray数组=json.getJSONArray(“审阅者”);

对于(inti=0;i使用Java和库org.json.JSONObject

   JSONObject json =new JSONObject(YOUR_JSON_HERE );        
            JSONArray array = json.getJSONArray("reviewers" );
            for(int i=0;i<array.length();i++){
                JSONObject user =array.getJSONObject(i);   
                System.out.println(user.getJSONObject("user").get("name"));
            }
            
    
        }
JSONObject json=新的JSONObject(这里是您的json);
JSONArray数组=json.getJSONArray(“审阅者”);

对于(int i=0;i您可以使用Groovy获得如下名称列表:

jason = '''{
  "reviewers": [
    {
      "user": {
        "name": "name1.n1",
        "emailAddress": "example@example.com"
      },
      "role": "REVIEWER"
    },
    {
      "user": {
        "name": "name2.n2",
        "emailAddress": "example2@example.com"
      },
      "role": "REVIEWER"
    }
  ]
}
'''


import groovy.json.JsonSlurper

def jsonslurper = new JsonSlurper()
def object = jsonslurper.parseText(jason)

List names = object.findAll { it.value instanceof List }
    .values()
    .flatten()
    .collect { it.user.name }

println names

只需使用Groovy,您就可以获得如下名称列表:

jason = '''{
  "reviewers": [
    {
      "user": {
        "name": "name1.n1",
        "emailAddress": "example@example.com"
      },
      "role": "REVIEWER"
    },
    {
      "user": {
        "name": "name2.n2",
        "emailAddress": "example2@example.com"
      },
      "role": "REVIEWER"
    }
  ]
}
'''


import groovy.json.JsonSlurper

def jsonslurper = new JsonSlurper()
def object = jsonslurper.parseText(jason)

List names = object.findAll { it.value instanceof List }
    .values()
    .flatten()
    .collect { it.user.name }

println names

基本groovy+json文档在此:


基本groovy+json文档在此:


如何使用数组对象访问length()?不,数组是JSONArray array=json.getJSONArray(“审阅者”);不是jsonObject?如何使用数组对象访问length()?不,数组是JSONArray array=json.getJSONArray(“审阅者”);不是jsonObject.values()方法无法访问,我在官方文档中也找不到它。是findAll{}是否要对所有元素进行迭代?它对列表中的值进行迭代,例如,有多个出现的值,如user。
.values()
返回返回的映射中包含的值的集合。它在官方文档中的第5个示例中。.values()方法不可访问,我在官方文档中也找不到它。findAll{}是否要迭代所有元素?它迭代列表中的值,即具有多个事件的值,如user。
.values()
返回返回的映射中包含的值的集合。它在官方文档的第5个示例中。这个println obj.reviewers*.user.name是否将迭代所有用户名和名称?如果是,是否可以将它们存储在字符串列表中?是。它将迭代数组中的所有元素。这是一个“扩展运算符”。读读她e:回答得很好。谢谢a lotIs这个println obj.reviewers*.user.name将迭代所有用户名和名称?如果是,可以将它们存储在字符串列表中吗?是的。它将迭代数组中的所有元素。这是一个“扩展运算符”。请阅读这里:回答得很好。非常感谢