वर्तमान में मैं एक सरणी से निकालने के लिए एक फ़ंक्शन लिख रहा हूं और फिर डेटाबेस में सहेज रहा हूं। जब मैं आउटपुट लिखता हूं तो यह फ़ाइल के चारों ओर रैपर (यह -> []) नहीं डालता है। यह json फ़ाइल को अपठनीय बनाता है। आश्चर्य है कि क्या मुझे कुछ याद आ रहा है

    $ArrayIndex = $script:jsonDB.username.IndexOf($UserNametextBox.text)
    $script:jsonDB = $script:jsonDB | Where-Object{$_ -ne $script:jsonDB[$ArrayIndex]}
    $script:jsonDB | ConvertTo-Json -Depth $ArrayIndex -Compress|
    Set-Content C:\Support\HardwareCollection.json
    $script:TableData = New-Object System.Collections.ArrayList
    $script:TableData.AddRange($script:jsonDB)
    $script:datagridview.DataBindings.DefaultDataSourceUpdateMode = 0 
    $script:datagridview.DataSource= $script:TableData
    $script:datagridview.Refresh

यहां काम कर रहे डीबी की एक प्रति है

[{"Date":"09/30/2021 10:19:34 -05:00","Username":"Username1000"}]

जब यह एक अपठनीय जेसन फ़ाइल सहेजता है तो यह कैसा दिखता है

{"Date":"09/30/2021 10:19:34 -05:00","Username":"Username1000"}

सभी का हार्दिक धन्यवाद!!!

0
Listor 4 अक्टूबर 2021, 17:03

1 उत्तर

सबसे बढ़िया उत्तर

जब आप किसी एकल वस्तु (या एकल-आइटम सरणी) को ConvertTo-Json पर पाइप करते हैं, तो यह मान लिया जाएगा कि मूल वस्तु एक अदिश है, भले ही वह किसी सरणी या सूची-जैसे प्रकार में समाहित हो, जब आप इसे पाइप किया (cmdlet के पास जानने का कोई तरीका नहीं है)।

इसे ठीक करने के लिए, एक सरणी या सूची सीधे को कमांड में इनपुट करने के बजाय पास करें:

ConvertTo-Json @($script:jsonDB) -Depth $ArrayIndex -Compress | ...

चूंकि cmdlet अब एक सरणी के लिए एक स्पष्ट संदर्भ प्राप्त करता है (जैसा कि सरणी के सदस्यों को प्राप्त करने के विपरीत, 1 बाय 1, पाइपलाइन के माध्यम से), यह जानता है कि रूट ऑब्जेक्ट भी एक सरणी होना चाहिए, और आपको लगातार परिणाम मिलेंगे चाहे कितनी भी वस्तुएँ $script:jsonDB में हों

1
Mathias R. Jessen 4 अक्टूबर 2021, 17:18
मदद के लिए धन्यवाद इसने मेरी समस्या को तुरंत हल कर दिया !!!
 – 
Listor
4 अक्टूबर 2021, 17:35