使用jq返回父节点,同时查询其中一个子节点

时间:2016-06-01 04:41:35

标签: json bash shell unix jq

想知道是否可以归还父母" Id"来自下面的json,同时查询孩子" Id"

{
    "DistributionList": {
        "Items": [
            {
                "Origins": {
                    "Items": [
                        {
                            "Id": "abc"
                        }
                    ],
                    "Quantity": 1
                },
                "Id": "parent123"
            },
            {
                "Origins": {
                    "Items": [
                        {
                            "Id": "def"
                        }
                    ],
                    "Quantity": 1
                },
                "Id": "parent345"
            }
         ]
    }
}

EG。如果我查询子ID" abc"它应该返回" parent123"。

做类似的事情:

more jsonfile | jq '.DistributionList.Items[].Origins.Items[] | select(.Id == "abc") | .Id'

只会返回" abc" - >但我需要父ID。 不确定是否有办法用jq

执行此操作

2 个答案:

答案 0 :(得分:1)

过滤器:      .. |对象|选择(.Origins.Items []?| .Id ==" abc")| .ID

产生

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.jobinsabu.georgetravels"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        repositories {
            maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases' }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:cardview-v7:23.1.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'

}

您可能希望参数化过滤器,例如:

"parent123"

答案 1 :(得分:0)

原始问题中的过滤器接近解决方案。所需要的只是重新排列select中的内容。 E.g。

  .DistributionList.Items[]
| select(.Origins.Items[].Id == "abc")
| .Id