2017-06-23 1 views
-1

Ich habe eine json als:JSON-Wert mit Nachschlag aus einer anderen Datei ersetzen

"key1": "Wert1"

"key2": "Wert2"

und eine andere Datei als:

Wert1 WertA

Wert2 WertB

I json Werte ersetzen müssen (valu e1, value2) zu Werten aus der Datei (valueA, valueB). Haben wir irgendein Python- oder Shell-Skript, um rekursiv die Werte aus der Dateisuche in Sohn zu lesen und sie durch zweite Spaltenwerte zu ersetzen!

+1

Nein, wir haben keine. Es tut uns leid. – taras

+0

Das 'Json' Modul ist dein Freund. – 9000

+0

Python oder Bash? Sie könnten entweder - aber wählen Sie die eine oder andere. –

Antwort

-1

würde ich vorschlagen, jq (erweiterte JSON Manipulationswerkzeug)

Eingabedateien:

test.json:

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

Values.TXT:

jq Lösung:

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 

Der Ausgang:

{ 
    "key1": "valueA", 
    "key2": "valueB" 
} 
-1

Sie könnten versuchen, ein solches Skript zu schreiben. Sie müssten

  • lesen Sie die Ersatzdaten ein, und organisieren Sie es in eine bequeme Datenstruktur, wie ein dict().
  • lesen Sie den ursprünglichen JSON ein und analysieren Sie ihn.
  • Iterieren Sie über die Daten aus dem ursprünglichen JSON, bei Bedarf ändern
  • schreiben Sie die Daten in eine neue JSON-Datei.

Hier ist ein solches Skript:

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

Dies wird die Arbeit tun, die Bereitstellung der Daten in einer Datei mit einem Raum, um die Spalten zu trennen getrennt wird.

#!/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'} 
Verwandte Themen