tidwall / gjson

Get JSON values quickly - JSON parser for Go
MIT License
14.39k stars 857 forks source link

How to get next value under ForEach function #342

Open flenoir opened 11 months ago

flenoir commented 11 months ago

Hi,

I did check all repo and couldn't find an answer about this.

Mu code is like below and i'm using "ForEach" to loop on a json object. I'd like to compare the current value to the next one to check if the values are the same.


    result2 := gjson.Get(json2, "hits.hits")

    result2.ForEach(func(key, value gjson.Result) bool {
        leresultatTmj := newEntiteTmj(value.Get("_source.kubernetes.labels.mycode").String(), value.Get("_source.kubernetes.myteam").String())
        println("current results are : ", leresultatTmj.composantTmj, leresultatTmj.team)
        return true // keep iterating
    })

How can i access the next value ? i did try to use "key" valueassociated to "value" but couldn't find a proper way.

Is it possible to do so ?

Thanks

alberto-bogoni commented 9 months ago

Hi! You can't treat directly a json object like an ordered list of key/value pairs

tidwall commented 9 months ago

I don't know if this helps but you can order the keys using @pretty:{"sortKeys":true}

For example:

result2 := gjson.Get(json2, "@pretty:{"sortKeys":true}|hits.hits")

This will ensure that all keys for the entire JSON are sorted.