Mam JSON jako:

"Key1": "Value1"

"Key2": "Value2"

I inny plik jako:

Wartość 1 wartość

Value2 Valueb.

Muszę zastąpić wartości JSON (Value1, Value2) do wartości z pliku (Valuea, Valueb). Czy mamy dowolny skrypt Pythona lub powłoki, aby rekurencyjnie odczytać wartości z wyszukiwania plików w Son Son i wymień go z drugim wartościami kolumnowymi!

-1
Shaan 23 czerwiec 2017, 22:04

3 odpowiedzi

Najlepsza odpowiedź

Sugerowałbym jq ( Zaawansowane narzędzie do manipulacji JSON)

Pliki wejściowe:

test.json :

{
"key1" : "value1",
"key2" : "value2"
}

wartości.txt ::

value1 valueA
value2 valueB

JQ Rozwiązanie:

jq -s '.[0] as $v | [ .[1] | to_entries | .[] 
       | if $v[(.value)]!=null then .value |= $v[.] else . end] 
       | from_entries' \
       <(jq -Rs '[split("\n") | .[] | split(" ") | select(length>0)] 
                 | reduce .[] as $a({}; .[$a[0]] |= $a[1])' values.txt) test.json

Wyjście:

{
  "key1": "valueA",
  "key2": "valueB"
}
-1
RomanPerekhrest 23 czerwiec 2017, 22:30

Spowoduje to wykonywanie zadania, pod warunkiem, że dane są oddzielone w pliku z przestrzenią oddzielającą kolumny.

#!/usr/bin/env python
#-*- coding: utf-8 -*-

dict_ = {
    "key1" : "value1",
    "key2" : "value2",
    }

def fileToDictionary(FILENAME):
    lines = [line.rstrip() for line in open(FILENAME)]
    return {k:v for (k, v) in [x.split(' ') for x in lines]}

fileDictionary = fileToDictionary(FILENAME)

items = {k: fileDictionary[v] for (k, v) in dict_.items()}

print(items)
# {'key1': 'valueA', 'key2': 'valueB'}
-1
syntaxError 23 czerwiec 2017, 19:27

Możesz spróbować napisać taki skrypt. Musisz

  • Odczytaj dane wymienne i zorganizuj go w wygodną strukturę danych, jak dict().
  • Czytaj i przeczytaj oryginalny JSON.
  • iterować dane z oryginalnego JSON, modyfikujące w razie potrzeby
  • Napisz dane do nowego pliku JSON.

Oto taki skrypt:

import json

with open('another.txt') as another:
    replacements = dict(line.split() for line in another)

with open('ajson.json') as j:
    data = json.load(j)

data = {k: replacements.get(v, v) for k,v in data.items()}

with open('ajson_new.json', 'w') as j:
    json.dump(data, j)
-1
Robᵩ 23 czerwiec 2017, 19:21