Pelaksanaan Golang menggunakan JQ dengan keadaan 'nilai dalam senarai'.

WBOY
Lepaskan: 2024-02-08 23:30:11
ke hadapan
996 orang telah melayarinya

使用 JQ 的 Golang 实现时具有“列表中的值”条件

Apa yang akan diperkenalkan oleh editor php Xiaoxin hari ini ialah syarat "nilai dalam senarai" apabila menggunakan pelaksanaan Golang JQ. Di Golang, JQ ialah bahasa pertanyaan yang berkuasa untuk mengekstrak dan mengubah maklumat daripada data JSON. Keadaan "nilai dalam senarai" ialah syarat yang biasa digunakan dalam pertanyaan JQ Ia boleh digunakan untuk menapis elemen dalam senarai yang mengandungi nilai tertentu. Dengan menggunakan pelaksanaan Golang JQ, kami boleh melaksanakan fungsi ini dengan mudah, dengan itu memudahkan pemprosesan data JSON kami dan meningkatkan kecekapan pembangunan. Seterusnya, kami akan memperincikan cara melaksanakan syarat "nilai dalam senarai" menggunakan pelaksanaan Golang JQ.

Kandungan soalan

Saya menggunakan perpustakaan ini dalam aplikasi Go saya: https://github.com/itchyny/gojq Ia berfungsi dengan baik, tetapi saya tidak dapat mencari cara untuk melakukan sesuatu dalam dokumentasi JQ. Saya mempunyai pertanyaan jq yang inputnya ialah senarai kedai yang tersedia dari fail konfigurasi seperti ini:

( [.stores[] | select( .is_open == true )] | length  > 1 ) 
     and 
( [.stores[] | select( .name == "Some store" )] | length == 1 )
Salin selepas log masuk

Pada asasnya ia bermaksud, daripada senarai kedai yang ada di kawasan saya, sekurang-kurangnya satu dibuka, dan, daripada senarai kedai yang ada di kawasan saya, sekurang-kurangnya satu dipanggil "sesetengah kedai". (Perhatikan bahawa ini adalah dua syarat yang berasingan, saya tidak kisah jika "Sesetengah kedai" ditutup).

Sekarang saya perlu menukar syarat ini supaya setiap kedai akan mempunyai "type_identifier" iaitu rentetan dan bukannya menggunakan syarat kedua untuk melihat nama. Pada asasnya apa yang saya mahukan adalah seperti ini:

( [.stores[] | select( .type_identifier in ["type1","type2", "type2"...] )] | length == 1 )
Salin selepas log masuk

Senarai jenis yang tersedia mempunyai kira-kira 600 jenis yang berbeza. Jadi soalan saya ialah:

  1. Adakah terdapat pemilih "dalam" dalam JQ? Apakah sintaks yang betul?
  2. Senarai "jenis" yang tersedia ialah medan lain bagi objek yang sama, bersama-sama dengan senarai kedai, bagaimana saya boleh membaca senarai terus daripada harta ini?

Terima kasih terlebih dahulu

Penyelesaian

Jika senarai itu panjang, lebih baik buat jadual carian.

(
   [ "type1", "type2", "type3" ] |
   map( { (.): true } ) |
   add
) as $lkup |

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )
Salin selepas log masuk

Saya letak yang biasa .stores 分解出来,替换成了 [ .[] | ... ]map( ... ).

Demo di jqplay.

<小时/>

Anda juga boleh menggunakan INDEX.

(
   [ "type1", "type2", "type3" ] |
   INDEX( .[]; . )
) as $lkup |

.stores |
( map( select( .is_open ) ) | length > 1 )
   and
( map( select( $lkup[ .type_identifier ] ) ) | length == 1 )
Salin selepas log masuk

Demo di jqplay.

Atas ialah kandungan terperinci Pelaksanaan Golang menggunakan JQ dengan keadaan 'nilai dalam senarai'.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan