thedevsaddam / gojsonq

A simple Go package to Query over JSON/YAML/XML/CSV Data
https://github.com/thedevsaddam/gojsonq/wiki
MIT License
2.18k stars 140 forks source link

Cannot find all elements in array #47

Closed 030 closed 5 years ago

030 commented 5 years ago

sample

{
  "items" : [ {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar",
    "path" : "file2/file2/1.0.0/file2-1.0.0.jar",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ZDQ4MTE3NTQxZGNiODllYzQzMTI5MDdhYzdiOWUyMDM",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "d9f877a857a7e9928eac04d09a59f25967624155",
      "sha256" : "0a8cac771ca188eacc57e2c96c31f5611925c5ecedccb16b8c236d6c0d325112",
      "sha512" : "e4694dce7937894bba2b5b4ad33dfd1893d8494fcd4eaac7ca3392c49ddba2ef0497b2a0307c81580611a785a0244a6003b4bae0d978c8d1544f4f691e6c7130",
      "md5" : "ad60407c083b4ecc372614b8fcd9f305"
    }
  }, {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "path" : "file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ODUxMzU2NTJhOTc4YmU5YTQyNGYxMzQ3NDYwYmM0ODI",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "0126c00d391aebeddcd55ef8d1bd99c26a0fdb57",
      "md5" : "d579a682f677fa6b22e054c8a69494d2"
    }
  } ],
  "continuationToken" : "35303a6235633862633138616131326331613030356565393061336664653966613733"
} 

Attempts

gojsonq.New().JSONString(json).From("items").Find("downloadUrl")

and

name := gojsonq.New().JSONString(json).Find("items.downloadUrl")

return

nil

while jq .items[].downloadUrl return all downloadUrl

The following jq statement returns all downloadUrls:

curl -X GET http://localhost:8081/service/rest/v1/search/assets?repository=maven-releases | jq .items[].downloadUrl

returns:

"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar.md5"
"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar.sha1"
"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.pom"
"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.pom.md5"
"http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.pom.sha1"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.jar.md5"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.jar.sha1"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.pom"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.pom.md5"
"http://localhost:8081/repository/maven-releases/file10/file10/1.0.0/file10-1.0.0.pom.sha1"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.jar.md5"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.jar.sha1"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.pom"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.pom.md5"
"http://localhost:8081/repository/maven-releases/file11/file11/1.0.0/file11-1.0.0.pom.sha1"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.jar.md5"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.jar.sha1"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.pom"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.pom.md5"
"http://localhost:8081/repository/maven-releases/file7/file7/1.0.0/file7-1.0.0.pom.sha1"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.jar.md5"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.jar.sha1"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.pom"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.pom.md5"
"http://localhost:8081/repository/maven-releases/file8/file8/1.0.0/file8-1.0.0.pom.sha1"
"http://localhost:8081/repository/maven-releases/file4/file4/1.0.0/file4-1.0.0.jar"
"http://localhost:8081/repository/maven-releases/file4/file4/1.0.0/file4-1.0.0.jar.md5"
Kvaz1r commented 5 years ago

You can use method Pluck/1

package main

import (
    "fmt"
    "reflect"

    "github.com/thedevsaddam/gojsonq"
)

const json = `{
  "items" : [ {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar",
    "path" : "file2/file2/1.0.0/file2-1.0.0.jar",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ZDQ4MTE3NTQxZGNiODllYzQzMTI5MDdhYzdiOWUyMDM",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "d9f877a857a7e9928eac04d09a59f25967624155",
      "sha256" : "0a8cac771ca188eacc57e2c96c31f5611925c5ecedccb16b8c236d6c0d325112",
      "sha512" : "e4694dce7937894bba2b5b4ad33dfd1893d8494fcd4eaac7ca3392c49ddba2ef0497b2a0307c81580611a785a0244a6003b4bae0d978c8d1544f4f691e6c7130",
      "md5" : "ad60407c083b4ecc372614b8fcd9f305"
    }
  }, {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "path" : "file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ODUxMzU2NTJhOTc4YmU5YTQyNGYxMzQ3NDYwYmM0ODI",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "0126c00d391aebeddcd55ef8d1bd99c26a0fdb57",
      "md5" : "d579a682f677fa6b22e054c8a69494d2"
    }
  } ],
  "continuationToken" : "35303a6235633862633138616131326331613030356565393061336664653966613733"
} `

func Print(t interface{}) {
    switch reflect.TypeOf(t).Kind() {
    case reflect.Slice:
        s := reflect.ValueOf(t)

        for i := 0; i < s.Len(); i++ {
            fmt.Println(s.Index(i))
        }
    }
}

func main() {
    jq := gojsonq.New().JSONString(json).From("items")
    Print(jq.Pluck("downloadUrl"))
}
thedevsaddam commented 5 years ago

@Kvaz1r you are correct! @030 you can use pluck,

package main

import (
    "fmt"

    "github.com/thedevsaddam/gojsonq"
)

const data = `{
  "items" : [ {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file2/file2/1.0.0/file2-1.0.0.jar",
    "path" : "file2/file2/1.0.0/file2-1.0.0.jar",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ZDQ4MTE3NTQxZGNiODllYzQzMTI5MDdhYzdiOWUyMDM",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "d9f877a857a7e9928eac04d09a59f25967624155",
      "sha256" : "0a8cac771ca188eacc57e2c96c31f5611925c5ecedccb16b8c236d6c0d325112",
      "sha512" : "e4694dce7937894bba2b5b4ad33dfd1893d8494fcd4eaac7ca3392c49ddba2ef0497b2a0307c81580611a785a0244a6003b4bae0d978c8d1544f4f691e6c7130",
      "md5" : "ad60407c083b4ecc372614b8fcd9f305"
    }
  }, {
    "downloadUrl" : "http://localhost:8081/repository/maven-releases/file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "path" : "file47/file47/1.0.0/file47-1.0.0.pom.sha1",
    "id" : "bWF2ZW4tcmVsZWFzZXM6ODUxMzU2NTJhOTc4YmU5YTQyNGYxMzQ3NDYwYmM0ODI",
    "repository" : "maven-releases",
    "format" : "maven2",
    "checksum" : {
      "sha1" : "0126c00d391aebeddcd55ef8d1bd99c26a0fdb57",
      "md5" : "d579a682f677fa6b22e054c8a69494d2"
    }
  } ],
  "continuationToken" : "35303a6235633862633138616131326331613030356565393061336664653966613733"
}
`

func main() {
    jq := gojsonq.New().JSONString(data)
    res := jq.From("items").Pluck("downloadUrl")
    fmt.Printf("Pluck: %v\n", res)
}

See more about Pluck