2014-05-12 8 views

risposta

11

ma ottengo sempre un array:

che è destinato a succedere. Come si può leggere in this documentation, alla voce 'Risultato' (quasi in fondo):

Si prega di notare, che il valore di ritorno di jsonPath è un array, che è anche una struttura JSON valido. Quindi potresti voler applicare jsonPath a la struttura risultante o usare uno dei tuoi metodi di array preferiti con esso.

Quindi in pratica restituisce sempre un array. Se hai bisogno dei dati come un altro tipo, ad es. una stringa in questo caso, dovrete fare la conversione da soli, ho paura.

+1

Sì, ho avuto modo di questa conclusione. Il motivo per cui ho chiesto è di vedere se mi manca un po 'di sintassi di JSONPath che mi consentirà di ottenere il primo elemento dell'array risultante e non un intero array. – Ilija

+0

@Ilija Purtroppo no. Comunque ho controllato il codice sorgente e non è molto complicato, forse potresti apportare alcune modifiche per far sì che restituisca qualcosa di diverso da un array quando lo vuoi. –

+0

Sì, ho finito per farlo (se il percorso termina con '' ~ first'' restituirà il primo elemento dell'array risultante). Odio fare cose del genere, ma se non c'era altro modo ... – Ilija

7

Stavo usando lo Java implementation di JSONPath e ho ottenuto lo stesso problema. Ciò che ha funzionato per me è stato aggiungere "[0]" alla stringa del percorso json. Quindi nel tuo caso:

$.single.name[0]

+3

Mi sono imbattuto nel problema simile ma con espressione. Voglio ottenere da un singolo oggetto array e dal singolo valore dell'oggetto, ma questo non funziona: 'data [? (@. Id == 9617)] [0] .is_favorite' questo non funziona' data [? (@. id == 9617)]. [0] .is_favorite' –

+0

Fornisci prima un esempio dei tuoi dati. – pepan

+0

Eccolo '{stato: {apiVersione:" V3_0 ", errorLevel: 0, errorMessage: null, errorLink: null}, dati: [{id: 94617, is_favorite: true, vip_sub_offers: [], vouchers: [{id : 11613004, codice: "F8JL2", offerta: 94.617, subOffer: 1613, validTo: "2016-05-20T23: 59: 59.000", stato: "usato", stateCode: 2, obtainType: "NORMAL", redirectUrl: null , phoneNumber: null, messageText: null, shopId: 94614, assignTime: "2016-05-19T00: 00: 03.000", useTime: "2016-05-19T00: 00: 05.000"}]}]} –