আমি কীভাবে একাধিক ক্ষেত্র নির্বাচন করব জিকিউ-তে


97

আমার ইনপুট ফাইলটি এরকম কিছু দেখাচ্ছে:

{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}

আমি এটি দিয়ে সমস্ত লগইন নামগুলি পেতে পারি: cat members | jq '.[].login'

তবে আমি লগইন এবং আইডি উভয়ই পেতে সিনট্যাক্সটি ক্র্যাক করতে পারি না?


আপনার প্রত্যাশিত আউটপুটটি দেখতে কেমন হওয়া উচিত তার উদাহরণ সরবরাহ করতে পারেন? লগইন / আইডি জোড়া প্রতিনিধিত্ব করতে পারে এমন অনেকগুলি উপায় রয়েছে।

উত্তর:


138

আপনি jq '.[] | .login, .id'প্রতিটি আইডিন অনুসরণ করে তার আইডি ব্যবহার করতে পারেন ।


4
ব্যবহারকারীর নমুনা ইনপুটটি অবজেক্টের স্ট্রিমের মতো দেখায়, তবে তারা যে নমুনা স্ক্রিপ্ট সরবরাহ করে তার কারণে, আমি ধরে নিচ্ছি যে এটি একটি অ্যারেতে আবৃত রয়েছে যা তারা বাদ দিয়েছে।

4
@ সাঁতিয়াগো ল্যাপরেস্তা: সেই অনুমানের দরকার নেই। jqঅবজেক্টের ক্রম সহ দুর্দান্ত কাজ করে - অ্যারে র‌্যাপারের প্রয়োজন নেই। ...স্ট্রিং এবং গত চিহ্ন কমা প্রয়োজন অপসারণ, কিন্তু আমি যে বিবেচনা উহ্য করা হবে।
— পিটার ভি।

55
অথবা আপনি যদি চান তবে কেবলমাত্র এই দুটি ক্ষেত্র প্রদর্শিত হবে। jq '.[] | {login, id}'
— ক্যামেরন ট্যাগগার্ট

4
@ ক্যামেরনটাগগার্ট, আমি যদি প্রদর্শন করতে চাই login.name? jq '.[] | {login.name, id}'কাজ করে মনে হচ্ছে, সঠিক উপায় কি, দয়া করে?
— zyxue

6
@zyxue এটি কাজ করে:jq '.[] | {name: .login.name, id}'
— অ্যালেক্স গ্রাউন্ডস


10

বিভিন্ন স্তরে (যেমন প্রথম এবং দ্বিতীয় স্তর উভয়) ইন্ডেন্টেড মানগুলি নির্বাচন করতে, আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

$ echo '[{"a":{"aa":1,"ab":2},"b":3,"c":4},{"a":{"aa":5,"ab":6},"b":7,"c":8}]'|jq '.[]|[.a.aa,.a.ab,.b]'

[
  1,
  2,
  3
]
[
  5,
  6,
  7
]

2

এখানে আরও একটি উদাহরণ সরবরাহ করুন (জেকিউ-১. 1.):

একটি অ্যারের মধ্য দিয়ে চলুন এবং সেই অবজেক্টে কোনও অবজেক্ট এলিমেন্টের ক্ষেত্র এবং অবজেক্টের ক্ষেত্র নির্বাচন করুন

echo '[{"id":1, "private_info": {"name": "Ivy", "age": 18}}, {"id":2, "private_info": {"name": "Tommy", "aga": 18}}]' | jq ".[] | {id: .id, name: .private_info.name}" -

{
  "id": 1,
  "name": "Ivy"
}
{
  "id": 2,
  "name": "Tommy"
}

উদাহরণ ডেটা ছাড়া:

jq ".[] | {id, name: .private_info.name}" -

.[]: একটি অ্যারের মাধ্যমে হাঁটা

{id, name: .private_info.name}: .id এবং .private_info.name নিন এবং যথাক্রমে ক্ষেত্রের নাম "আইডি" এবং "নাম" সহ একটি বস্তুতে এটি আবদ্ধ করুন


কাঠামো / মূল নামগুলি বজায় রাখার জন্য অবজেক্টে মোড়ানো দুর্দান্ত, আমি যা খুঁজছি ঠিক তা
— cryanbhu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.