ইউনিক্স কমান্ড-লাইন জেএসএন পার্সার? [বন্ধ]


128

কেউ কি কোনও ইউনিক্স (আপনার স্বাদ চয়ন করতে পারেন) JSON পার্সার প্রস্তাব করতে পারেন যা কোনও পাইপলাইনে জেএসওএন প্রতিক্রিয়া থেকে মানকে অন্তর্নিম্ন করতে ব্যবহার করা যেতে পারে?


আমি পাইথনপি ব্যবহার করতে চাই ( github.com/russell91/pythonpy ): বিড়াল a.json | py --ji -x 'x.attr'
রাসেল



1
শহরে একটি নতুন সরঞ্জাম রয়েছে: রামদা-ক্লিমে , যা রামদা'র তরকারি এপি এবং লাইভস্ক্রিপ্ট টর্স সিনট্যাক্স ব্যবহার করে। এটি জসনকে ইনপুট হিসাবে এবং রচনা কার্য হিসাবে গ্রহণ করতে নির্মিত to npm install -g ramda-cli
এহভিন্স

উত্তর:


18

পার্ল কোরটিতে অন্তর্নির্মিত মডিউলগুলি ব্যবহার করে আপনি এই কমান্ড-লাইন পার্সারটি (যা আপনি পছন্দ করলে বাশ ওরফে রাখতে পারেন):

perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'

1
আমি এর আউটপুট দ্বারা বিভ্রান্ত। আউটপুটটিতে কী এবং মানগুলির মধ্যে ফ্যাট তীর (=>) অন্তর্ভুক্ত। এটি জেএসএন নয়।
ল্যান্ডন কুহন

7
@ল্যান্ডন: না, ইনপুটটি জেএসওএন এবং আউটপুটটি একটি দেশীয় পার্ল ডেটা স্ট্রাকচার, যা আপনি যদি প্রয়োজন হয় তবে আরও হেরফের করতে পারেন। এই ওয়ান-লাইনারের মূল বিষয়টি হ'ল এটি এমন ডেটা তৈরি করে যা পড়া সহজ।
ইথার

1
আপনি যদি JSON আউটপুট চান, আপনি এই পার্ল ওয়ান-লাইনার ব্যবহার করতে পারেন:perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
জর্জি ভ্লাদিমিরভ

232

আমি পছন্দ করি python -m json.toolযা ডিফল্ট হিসাবে বেশিরভাগ * নিক্স অপারেটিং সিস্টেমে ডিফল্ট হিসাবে উপলব্ধ বলে মনে হয়।

$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
    "bar": 2, 
    "foo": 1
}

তবে এটি লক্ষ্য করা উচিত যে এটি সমস্ত কীগুলি বর্ণমালা অনুসারে বাছাই করবে, যা জসসন এমন কোনও ভাষা দ্বারা উত্পাদিত হয়েছিল যা আনর্ডার্ড হ্যাশম্যাপগুলি ব্যবহার করেছিল ...


5
আন্ডাররেটেড উত্তর। লক্ষ্যটি যদি কোনও প্রদত্ত JSON ফাইলকে বৈধ JSON ধারণকারী হিসাবে যাচাই করা হয় তবে এটি একটি দুর্দান্ত কমান্ড-লাইন বিকল্প।
scorpiodawg

10
এই উত্তরটি নির্দিষ্ট কীগুলির মানগুলি কীভাবে পরিদর্শন করবেন তা বর্ণনা করে না।
কলিন সু

8
@ কলিনসু কিন্তু এটিও মূল প্রশ্ন ছিল না। json.toolচমত্কার মুদ্রণ জসন কেবলমাত্র একটি ছোট হাত। আপনার যদি শেল স্ক্রিপ্টে জসন ডেটা বের করতে / jq
চালনার

@ মম, হ্যাঁ, আমি জানি, আমি json.toolপ্রতিদিন দশবার ব্যবহার করি । আমি মনে করি আমি প্রশ্নের মধ্যে "অন্তর্মুখ" এর অর্থটি ভুলভাবে লিখেছি, আপনার নির্দেশের জন্য ধন্যবাদ।
কলিন সু

1
আইএমএমও এটি একটি ভুল উত্তর কারণ অজগর json.toolকেবলমাত্র দুটি কাজ করে: বৈধতা এবং সুন্দর-প্রিন্ট জেসন। এটি জসন-এর মতো মানগুলিকে অন্তর্ভুক্ত করে না jq
ডেভি

144

আপনি যদি কোনও পোর্টেবল সি সংকলিত সরঞ্জামের সন্ধান করছেন:

http://stedolan.github.com/jq/

ওয়েবসাইট থেকে:

jq মত হল sed JSON তথ্য জন্য - আপনি ফালি এবং ফিল্টার করার জন্য এটি ব্যবহার এবং মানচিত্র এবং একই স্বচ্ছন্দে সঙ্গে কাঠামোবদ্ধ ডেটা রুপান্তর করতে পারেন sed , awk , , grep এবং বন্ধুদের আপনি পাঠ্য সঙ্গে খেলা যাক।

আপনি খুব অল্প পরিশ্রমে চেষ্টা করতে চান এমন একটি জ্যাকেট আপনার কাছে থাকা ডেটা ফর্ম্যাটটিকে ম্যাঙ্গেল করতে পারে এবং এটি করার প্রোগ্রামটি আপনার প্রত্যাশার চেয়ে প্রায়শই খাটো এবং সহজ হয়।

টিউটোরিয়াল : http://stedolan.github.com/jq/tutorial/
ম্যানুয়াল : http://stedolan.github.com/jq/manual/
ডাউনলোড : http://stedolan.github.com/jq/download/


20
এখানে সেরা উত্তর। কোনও ভারী নির্ভরতা নেই, ছোট, শক্তিশালী, ভাল ডকুমেন্টেশন এবং এটি ব্যবহার করার জন্য একটি হাওয়া। এই পরামর্শ দেওয়ার জন্য অনেক ধন্যবাদ!
ফ্রোজেনকো

উবুন্টু / ডেবিয়ানে আপনি ঠিক পারেন apt install jq
পাবলো এ

আমি এটিকে বহু-চাঁদ আগে জিজ্ঞাসা করেছি এবং ভালবাসতে শিখেছি jq
Jue Queue

63

আমি বিশেষ করে কমান্ড-লাইন জেএসএন হেরফের জন্য ডিজাইন করা একটি মডিউল তৈরি করেছি:

https://github.com/ddopson/underscore-cli

  • নমনীয় - JSON ডেটা প্রক্রিয়াকরণের জন্য "সুইস-আর্মি-ছুরি" সরঞ্জাম - একটি সাধারণ সুন্দর-প্রিন্টার হিসাবে, বা একটি পূর্ণ-ক্ষমতাযুক্ত জাভাস্ক্রিপ্ট কমান্ড-লাইন হিসাবে ব্যবহার করা যেতে পারে
  • পাওয়ারফুল - আন্ডারস্কোর.জে (সম্পূর্ণ আন্ডারস্কোর.স্ট্রিং) এর সম্পূর্ণ শক্তি এবং কার্যকারিতা প্রকাশ করে
  • সহজ - জেএস ওয়ান-লাইনারগুলিকে "পার্ল -পি" ব্যবহারের অনুরূপ লেখা সহজ করে তোলে
  • চেইনড - একাধিক কমান্ড আহ্বানগুলি একসাথে একটি ডেটা প্রসেসিং পাইপলাইন তৈরি করতে চেইন করা যেতে পারে
  • মাল্টি- ফর্ম্যাট - ইনপুট / আউটপুট ফর্ম্যাটগুলির জন্য সমৃদ্ধ সমর্থন - চমত্কার-মুদ্রণ, কঠোর জেএসএন ইত্যাদি [শীঘ্রই আসছে]
  • নথিভুক্ত - যে কমান্ড জন্য একাধিক উদাহরণ চমৎকার কম্যান্ড-লাইন ডকুমেন্টেশন

এটি আপনাকে শক্তিশালী জিনিসগুলি খুব সহজেই করতে দেয়:

cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
#   'New town, Edinburgh, Scotland [4320 x 3240]',
#   'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
#   'Kariega Game Reserve, South Africa [3584x2688]',
#   'Valle de la Luna, Chile [OS] [1024x683]',
#   'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]

cat earthporn.json | underscore select '.data .title' | underscore count
# 25

underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]

underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]

echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar

underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]

underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]

underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10

এবং এটিতে একটি সেরা "স্মার্ট-হোয়াইটস্পেস" জেএসওএন ফর্ম্যাটর উপলব্ধ রয়েছে:

আপনার যদি কোনও বৈশিষ্ট্যের অনুরোধ থাকে তবে এই পোস্টে মন্তব্য করুন বা গিথুবে কোনও সমস্যা যুক্ত করুন। সম্প্রদায়ের সদস্যদের প্রয়োজনীয় বৈশিষ্ট্যগুলির অগ্রাধিকার দিতে আমি আনন্দিত হব।


অসাধারণ! তবে, জেএসওএন ডেটাতে কনসোল কমান্ডগুলি চালানো কি সম্ভব? উদাহরণস্বরূপ: wgetপ্রতিটি ইউআরএল , একটি ইউআরএল অ্যারে সহ একটি জেএসএন ফাইল দেওয়া ।
ক্যামিলো মার্টিন

@ ক্যামিলোমার্টিন - এটির সবচেয়ে সহজ উপায় হ'ল ইউআরএলগুলি মুদ্রণ করা, প্রতি লাইনে একটি ইউআরএল, এবং তারপরে এটি জার্গেজ বা জিএনইউ সমান্তরাল মাধ্যমে চালানো।
ডেভ ডপসন

@ ডেভডপসন আমি underscoreনেস্টেড জেসসনকে নেস্টেড অবজেক্ট এবং অ্যারে পার্সিংয়ের জন্য ব্যবহার করতে পারি ?
ব্যবহারকারী 227666

1
@ ব্যবহারকারী 227666 - নিশ্চিত। জেএসএন অনেকগুলি স্তরের বস্তুকে বাসা বেঁধে সমর্থন করে। অথবা আপনি জাসনকে বোঝাতে পারেন যার একটি স্ট্রিং রয়েছে যা আরও জেএসএনকে এনকোড করে। যা কাজ করে, তবে কেবল খানিকটা মুগিংয়ের প্রয়োজন।
ডেভ ডপসন

@ ডেভডপসন ডেট আন্ডারস্কোর সমর্থন করে "" একটি "প্যাটার্ন" থাকে, অর্থাত্‍। একটি নির্দিষ্ট "কী" এর জন্য, (কেস-অ-সংবেদনশীল) মানগুলির সম্ভাব্য সেট? আমি ম্যাচটির সাথে "জকিউ" চেষ্টা করেছি, তবে এটি কার্যকর হয় না। আমার সম্পূর্ণ ব্যবহারের কেসটি
একতা

13

চেকআউট টিকটিক

এটি একটি সত্য বাশ জেএসওন পার্সার।

#!/bin/bash
. /path/to/ticktick.sh

# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`

tickParse "$DATA"

echo ``pathname``
echo ``headers["user-agent"]``

শেল-স্তরের সরঞ্জামগুলি পছন্দ করেছে :)
Jé কুই

12

রয়েছে তাদেরকে JSON কমান্ড লাইন প্রক্রিয়াকরণের টুলকিট যদি আপনি আপনার স্ট্যাকের মধ্যে Node.js এবং npm আছে এরকম।

এবং আপনার ইউনিক্স কমান্ড লাইনে জেএসএনকে ম্যাসেজ করার জন্য আর একটি "জসন" কমান্ড

এবং এখানে অন্যান্য বিকল্প রয়েছে:


সম্পর্কিত: ইউনিক্সের জন্য JSON ইনপুট পার্স করার জন্য কমান্ড লাইন সরঞ্জাম?


উবুন্টুতে সহজেই ইনস্টল করা: পাইডন-পিপ ইনস্টল করুন &
স্যাডো

@ splitandconquer.se দুঃখিত তবে আপনি এনপিএম এর সাথে এই সরঞ্জামটি ইনস্টল করেন npm install json
গীতারিক

@ রেডনো দুর্ভাগ্যক্রমে, এনপিএম jsonপ্যাকেজটি এখন সম্পূর্ণ আলাদা প্যাকেজ দ্বারা গ্রহণ করা হয়েছে বলে মনে হচ্ছে।
ব্র্যাড

8

কেউ Jshon বা JSON.sh উল্লেখ করেছেন?

https://github.com/keenerd/jshon

এটিতে পাইপ জসন রয়েছে এবং এটি জসন অবজেক্টগুলিকে অনুসরণ করে এবং বর্তমান অবজেক্টের (জেএসএন অ্যারে হিসাবে) এবং তারপরে অবধি কোনও সাদা স্থান ছাড়াই প্রিন্ট করে।

http://kmkeen.com/jshon/
Jshon স্টিডিন থেকে জেসন পাঠ্য লোড করে, ক্রিয়া সম্পাদন করে, তারপর স্টাডাউটে শেষ ক্রিয়াটি প্রদর্শন করে এবং এটি সাধারণ পাঠ্য প্রক্রিয়াকরণ পাইপলাইনের অংশ হিসাবে তৈরি করা হয়েছিল।


উপর ওএসএক্স উদাহরণ ব্যবহার: brew install jshon,cat *.json | jshon
kenorb

2

এই জবাব হিসাবে আপনি jsawk চেষ্টা করতে পারেন ।

সত্যিই আপনি এটি করার জন্য দ্রুত পাইথন স্ক্রিপ্টটি বেত্রাঘাত করতে পারেন।


1

বাশ / পাইথনের জন্য পাইথনের আশেপাশে এখানে একটি প্রাথমিক মোড়ক রয়েছে simplejson:

json_parser() {
    local jsonfile="my_json_file.json"
    local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "`
            `"myjson=simplejson.loads(myjsonstr);"
    # Build python print command based on $@
    local printcmd="print myjson"
    for (( argn=1; argn<=$#; argn++ )); do
        printcmd="$printcmd['${!argn}']"
    done
    local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \
        || python -c "$tc $printcmd" <$jsonfile 2>/dev/null)
    # For returning space-separated values
    echo $result|sed -e "s/[]|[|,|']//g"
    #echo $result 
}

এটি সত্যিই কেবল নেস্টেড-অভিধানের স্টাইলের ডেটা পরিচালনা করে তবে এটি আমার যা প্রয়োজন তার জন্য কাজ করে এবং জসন দিয়ে চলার জন্য দরকারী। এটি সম্ভবত স্বাদ অনুসারে অভিযোজিত হতে পারে।

যাইহোক, যারা অন্য কোনও বাহ্যিক নির্ভরতার উত্স পেতে চান না তাদের জন্য কিছু উত্সাহিত। পাইথন বাদে অবশ্যই।

যাত্রা। সঞ্চালিত json_parser {field1} {field2}হবে , স্থান বা পৃথক পৃথক পৃথক print myjson['{field1}']['{field2}']কী বা এর সাথে সম্পর্কিত মানগুলি প্রদান করে {field2}


0

আমি সবেমাত্র জকিড তৈরি করেছি যা একটি ছোট কমান্ড-লাইনের জসন এক্সপ্লোরার যা আমি খুব সহজেই বড় বড় জসন বস্তুগুলি অন্বেষণ করতে তৈরি করেছিলাম। অবজেক্টগুলি "ট্রান্সভার্সালি" অন্বেষণ করা যেতে পারে এবং কনসোল ওভারফ্লো এড়াতে একটি "প্রাকদর্শন" বিকল্প রয়েছে।

$  echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$  jkid . eyes test3.json 
object[.]["eyes"]
{
  "bob": "brown", 
  "john": "green"
}

আমি কীভাবে jkidম্যাক ইনস্টল করতে পারি ?
ব্যবহারকারী 227666
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.