Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pelaksanaan Golang menggunakan JQ dengan keadaan "nilai dalam senarai".

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

WBOY
WBOYke hadapan
2024-02-08 23:30:11943semak imbas

使用 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 )

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 )

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 )

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 )

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam