मैंने अभी इस स्क्रिप्ट को अभ्यास के लिए लिखना शुरू किया है, यह इनपुट लेगा और फिर इसे Json फ़ाइल के अंदर लिख देगा। कोड इस तरह दिखता है:

import json


command = int(input("Do You Want To Add, Or Remove From List? 1/2 "))
if command == 1:
    add_key = input("Type In key Name: ")
    add_val1 = input("Type In Value N1: ")
    add_val2 = input("Type In Value N2: ")

    with open('jjj.json', 'r+') as jjson:
        tvsh = json.load(jjson)
        new_tvsh = {add_key: [add_val1, add_val2]}
        tvsh.update(new_tvsh)
        jjson.seek(0)
        json.dump(tvsh, jjson)
elif command == 2:
    with open('jjj.json', 'r+') as jjson:
        tvsh = json.load(jjson)
        chooseremove = input("Choose Key To Remove: ")
        try:
            del tvsh[chooseremove]
        except KeyError as ex:
            print(f"No such key: {chooseremove} ")
        jjson.seek(0)
        json.dump(tvsh, jjson)

जेसन फ़ाइल इस तरह दिखती है:

{"Key1":["Val1","Val2"],"Key2":["Val1","Val2"],"Key3":["Val1","Val2"]}

लेकिन जब मैं कुंजी को हटाने का प्रयास करता हूं (उदाहरण के लिए key3) मेरी जेसन फाइल इस तरह होगी:

{"Key1":["Val1","Val2"],"Key2":["Val1","Val2"]} "Key3":["Val1","Val2"]}

यह बाहर की कुंजी ले रहा है लेकिन अंत में "}" जोड़ रहा है कोई विचार मैं क्या कर सकता हूं?

संपादित करें: भी कोशिश की .pop लेकिन एक ही परिणाम

1
Sandro Basharuli 20 अक्टूबर 2020, 04:27

1 उत्तर

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

यहाँ त्रुटि यह है कि jjson.seek(0) के बाद json.dump(tvsh, jjson) को चलाने से मौजूदा फ़ाइल की सामग्री नष्ट नहीं होती है, यह केवल इसे अधिलेखित कर देती है। चूंकि Key3 को हटाने के बाद आप JSON फ़ाइल में जो डेटा संरचना लिख ​​रहे हैं, वह छोटी है, पूरी फ़ाइल अधिलेखित नहीं है (यानी, "Key3":["Val1","Val2"]} आपके पहले लेखन से बचा हुआ है)।

यहाँ समाधान json.dump(tvsh, jjson) चलाने के बाद jjson.truncate() चलाना है।

निम्नलिखित प्रोग्राम उपयोगकर्ता इनपुट पर निर्भर किए बिना अंतर दिखाता है:

#!/usr/bin/env python3

import json

# Test data
initial_data = {
    "Key1":["Val1", "Val2"],
    "Key2":["Val1", "Val2"],
    "Key3":["Val1", "Val2"],
}
final_data = {
    "Key1":["Val1", "Val2"],
    "Key2":["Val1", "Val2"],
}

with open('testA.json', 'w') as f:
    json.dump(initial_data, f)
    f.seek(0)
    json.dump(final_data, f)

with open('testB.json', 'w') as f:
    json.dump(initial_data, f)
    f.seek(0)
    json.dump(final_data, f)
    f.truncate()
2
Ken 20 अक्टूबर 2020, 01:51