Javascript Objekte in json konvertieren

Ich werde noch einen Online Converter programmieren aber bis dahin habt ihr die manuelle Vorgehensweise

    Inhaltsangabe
  1. Regex
    1. Ein Beispiel
    2. Erklärung
  2. Die Konvertierung
    1. Was muss verändert werden?
    2. Vorgehensweise
    3. Ergebnis
  3. Fazit

Heute geht es wieder um ein Thema in der Programmierung. Ich habe diese Woche ausschließlich damit verbracht, an meinem Islam Archiv Projekt zu arbeiten. Es ist nicht einmal im pre-Alpha stadium, weil ich es versuche so perfekt wie möglich zu machen.

Regex

In der Computersprache gibt es so genannte Regular Expressions (Reguläre Ausdrücke). Mit denen kann man ein Muster erstellen, wonach der Computer suchen soll und die Ergebnisse kann man dann entsprechend filtern.

Ein Beispiel

Sagen wir mal wir hatten folgende Telefonliste und wollen nur die deutschen Telefon Nummern mit der Vorwahl für Deutschland (+49) markieren:

  • +49 12 3 456
  • +30 2 34 567
  • +1 123 45 6
  • +49 234 56 7
  • +90 12 3 456

Dann kann man das einfach mit einer Regular Expression machen. Der Vorteil hierbei ist, dass die Struktur egal ist, solange es in das Muster des Regulären Ausdruckes passt. In diesem Fall wäre es:

+49[ \d]+

Erklärung

  • +49 Es wird jede Zeile nach der Zeichenkette +49 gesucht.
  • [ \d]+ Es wird in der selben Zeile nach allen Leerzeichen und Zahlen (\d) gesucht. Diese Suche wird wiederholt (+), bis entweder die Zeile zu Ende ist oder ein anderes Zeichen auftaucht als ein Leerzeichen oder eine Zahl.

Wieso das Verständnis von Regulären Ausdrücken so wichtig ist, werdet ihr verstehen, wenn ich euch die Konvertierung erkläre

Die Konvertierung

Ich habe folgendes Javascript Objekt:

{
	system: {
		error: 'Hata!',
	},
	login_register: {
		join: 'Katıl',
		login: 'Giriş yap',
		no_account_question: 'Hesabın yok mu?',
		register_now: 'Bir hesap oluştur',
		already_account_question: 'Zaten bir hesabın var mı?',
		logout: 'Çıkış yap',
		register: 'Üye ol',
		email: 'Email adresi',
		email_check: 'Lütfen Email adresini kontrol et.',
		email_already_exists: 'Bu e-posta adresine sahip bir hesap zaten var.',
		password: 'Şifre',
		password_repeat: 'Şifre tekrarı',
		password_check: 'Lütfen Şifreni kontrol et.',
		onlyLoggedIn : 'Sadece üyeler için',
	},
	cms: {
		language : 'Dil',
		show_details : 'Detaylar',
		add: '{element} ekle',
		edit: '{element} düzenle',
		split: 'Burandan böl',
		cut: 'Kes',
		view: {
			readOnly : 'Sadece oku',
			detail : 'Detay',
			edit : 'Düzenle'
		},
		save : 'Kaydet',
		back : 'Geri',
		close : 'Kapat',
		abort : 'İptal',
		merge : 'Bidahakisiyle birleştir',
		image : 'Resim',
		home: 'Ana sayfa',
		finished : 'Tamam',
		search : {
			enter : 'Aradığınızı yazın'
		},
		
	},
	global : {
		page : {
			singular : 'Sayfa',
			plural : 'Sayfa',
		},
		favourite : {
			singular : 'Favori',
			plural : 'Favoriler',
		},
		collection : {
			singular : 'Koleksiyon',
			plural : 'Koleksiyonlar',
		},
		work : {
			begin : 'Çalış',
		},
		beginning : 'Baştan',
		continue : 'Devam et',
	},
	elements : {
		quran : {
			singular : 'Kurân',
			plural : 'Kurân',
			in : 'Kurân\'da',
			child : {
				singular : 'Sûre',
				plural : 'Sûreler',
				show : '{no}. Sûreyi görüntüle',
			},
			grandchild : {
				not_found : 'Âyet bulunamadı',
				singular : 'Âyet',
				plural : 'Âyet',
				show : '{no}. Âyeti görüntüle',
				show_all : 'Tüm Sûreyi göster'
			}
		},
		tag : {
			no_tags : 'Şuan konu eklenmedi',
			singular : 'Konu',
			plural : 'Konular',
			in : 'Konularda',
			enter : 'Konu girin',
			add : 'Konu ekle',
			has : '{count} konu',
		},
		mention : {
			singular : 'Bahis',
			plural : 'Bahisler',
			add : 'Bahis ekle',
			no_mentions : 'Şuan bahsedilen Eklenti yok',
			select_mention : 'Bahis şeklini seçin'
		},
		book : {
			singular : 'Kitap',
			plural : 'Kitaplar',
			title : 'Kitap adı',
			author : 'Yazar',
			in : 'Kitaplarda',
			search : 'Kitaplarda adı',
			image : {
				image : 'Kitap resmi',
				remove : 'Kitaptan resmi kaldır',
			},
			child : {
				singular : 'Bölüm',
				title : 'Bölüm adi',
			},
			grandchild : {
				not_found : 'Pasaj bulunamadı',
				singular : 'Pasaj',
				show_all : 'Tüm bölümleri göster'
			},
			last : {
				added : 'Son eklenen kitaplar',
			}
		},
		hadith : {
			singular : 'Hadis',
			plural : 'Hadisler',
			in : 'Hadislerde',
			description : 'Hz. Peygamber Efendimizin sözüne Merfu Hadis, Sahabe sözlerine Mevkuf  Hadis, Tabiin sözlerine de Maktu Hadis ismi verilir.',
			grandchild : {
				singular : 'Hadis',
				show_all : 'Tüm hadisleri göster'
			}
		},
		audio : {
			singular : 'Ses',
			plural : 'Ses kayıtları',
			in : 'Ses kayıtlarında',
		},
		video : {
			singular : 'Video',
			plural : 'Videolar',
			in : 'Videolarda',
		},
		history : {
			singular : 'Tarih',
			plural: 'Tarihî olaylar',
			in : 'Tarihî olaylarda',
		},
		person : {
			singular : 'Şahıs',
			plural : 'Şahıslar',
			name : 'İsim',
			title : 'Ünvan',
			birth : 'Doğum',
			death : 'Ölüm',
			enter : 'Şahıs adı',
			in : 'Şahıslarda',
			grandchild : {
				singular : 'Şahıs'
			}
		},
	},
	element_metas: {
		title : {
			t : 'Başlık',
		},
		birth : {
			t : 'Dogum',
		},
		death : {
			t : 'Ölüm',
		},
	}
}

Was muss verändert werden?

  1. JSON verwendet zur Ummantelung seiner Schlüssel und Variablen immer ein Anführungszeichen („). Die Schlüssel und Variablen müssen mit einem Anführungszeichen („) ummantelt werden
  2. JSON nimmt es mit der Anzahl der Objektinhalte sehr genau. Wenn man also einige Elemente hinzugefügt hat kann man nicht am Ende noch ein Komma (,) hinzufügen wie z.B. beim letzten Element im Beispiel (death).

Vorgehensweise

Ich habe zur automatisierten Umwandlung ein Paar Regex Einträge geschrieben und danach ging das wie von selbst. Dazu habe ich in meinem Editor (Atom) in der „Suchen und ersetzen“ Funktion die Regex Suche aktiviert. Anschließend habe ich folgende Suchen durchgeführt:

Suche nach ( )(\w)
Ersetzen durch$1″$2

Suche nach (\w):
Ersetzen durch$1 :

Suche nach (\w) :
Ersetzen durch$1″ :

Suche nach ,([\s]+})
Ersetzen durch$1

Suche nach
Ersetzen durch

Ergebnis

{
	"system" : {
		"error" : "Hata!"
	},
	"login_register" : {
		"join" : "Katıl",
		"login" : "Giriş yap",
		"no_account_question" : "Hesabın yok mu?",
		"register_now" : "Bir hesap oluştur",
		"already_account_question" : "Zaten bir hesabın var mı?",
		"logout" : "Çıkış yap",
		"register" : "Üye ol",
		"email" : "Email adresi",
		"email_check" : "Lütfen Email adresini kontrol et.",
		"email_already_exists" : "Bu e-posta adresine sahip bir hesap zaten var.",
		"password" : "Şifre",
		"password_repeat" : "Şifre tekrarı",
		"password_check" : "Lütfen Şifreni kontrol et.",
		"onlyLoggedIn" : "Sadece üyeler için"
	},
	"cms" : {
		"language" : "Dil",
		"show_details" : "Detaylar",
		"add" : "{element} ekle",
		"edit" : "{element} düzenle",
		"split" : "Burandan böl",
		"cut" : "Kes",
		"view" : {
			"readOnly" : "Sadece oku",
			"detail" : "Detay",
			"edit" : "Düzenle"
		},
		"save" : "Kaydet",
		"back" : "Geri",
		"close" : "Kapat",
		"abort" : "İptal",
		"merge" : "Bidahakisiyle birleştir",
		"image" : "Resim",
		"home" : "Ana sayfa",
		"finished" : "Tamam",
		"search" : {
			"enter" : "Aradığınızı yazın"
		}
		
	},
	"global" : {
		"page" : {
			"singular" : "Sayfa",
			"plural" : "Sayfa"
		},
		"favourite" : {
			"singular" : "Favori",
			"plural" : "Favoriler"
		},
		"collection" : {
			"singular" : "Koleksiyon",
			"plural" : "Koleksiyonlar"
		},
		"work" : {
			"begin" : "Çalış"
		},
		"beginning" : "Baştan",
		"continue" : "Devam et"
	},
	"elements" : {
		"quran" : {
			"singular" : "Kurân",
			"plural" : "Kurân",
			"in" : "Kurân\"da",
			"child" : {
				"singular" : "Sûre",
				"plural" : "Sûreler",
				"show" : "{no}. Sûreyi görüntüle"
			},
			"grandchild" : {
				"not_found" : "Âyet bulunamadı",
				"singular" : "Âyet",
				"plural" : "Âyet",
				"show" : "{no}. Âyeti görüntüle",
				"show_all" : "Tüm Sûreyi göster"
			}
		},
		"tag" : {
			"no_tags" : "Şuan konu eklenmedi",
			"singular" : "Konu",
			"plural" : "Konular",
			"in" : "Konularda",
			"enter" : "Konu girin",
			"add" : "Konu ekle",
			"has" : "{count} konu"
		},
		"mention" : {
			"singular" : "Bahis",
			"plural" : "Bahisler",
			"add" : "Bahis ekle",
			"no_mentions" : "Şuan bahsedilen Eklenti yok",
			"select_mention" : "Bahis şeklini seçin"
		},
		"book" : {
			"singular" : "Kitap",
			"plural" : "Kitaplar",
			"title" : "Kitap adı",
			"author" : "Yazar",
			"in" : "Kitaplarda",
			"search" : "Kitaplarda adı",
			"image" : {
				"image" : "Kitap resmi",
				"remove" : "Kitaptan resmi kaldır"
			},
			"child" : {
				"singular" : "Bölüm",
				"title" : "Bölüm adi"
			},
			"grandchild" : {
				"not_found" : "Pasaj bulunamadı",
				"singular" : "Pasaj",
				"show_all" : "Tüm bölümleri göster"
			},
			"last" : {
				"added" : "Son eklenen kitaplar"
			}
		},
		"hadith" : {
			"singular" : "Hadis",
			"plural" : "Hadisler",
			"in" : "Hadislerde",
			"description" : "Hz. Peygamber Efendimizin sözüne Merfu Hadis, Sahabe sözlerine Mevkuf  Hadis, Tabiin sözlerine de Maktu Hadis ismi verilir.",
			"grandchild" : {
				"singular" : "Hadis",
				"show_all" : "Tüm hadisleri göster"
			}
		},
		"audio" : {
			"singular" : "Ses",
			"plural" : "Ses kayıtları",
			"in" : "Ses kayıtlarında"
		},
		"video" : {
			"singular" : "Video",
			"plural" : "Videolar",
			"in" : "Videolarda"
		},
		"history" : {
			"singular" : "Tarih",
			"plural" : "Tarihî olaylar",
			"in" : "Tarihî olaylarda"
		},
		"person" : {
			"singular" : "Şahıs",
			"plural" : "Şahıslar",
			"name" : "İsim",
			"title" : "Ünvan",
			"birth" : "Doğum",
			"death" : "Ölüm",
			"enter" : "Şahıs adı",
			"in" : "Şahıslarda",
			"grandchild" : {
				"singular" : "Şahıs"
			}
		}
	},
	"element_metas" : {
		"title" : {
			"t" : "Başlık"
		},
		"birth" : {
			"t" : "Dogum"
		},
		"death" : {
			"t" : "Ölüm"
		}
	}
}

Fazit

Ich habe diese Konvertierung für meinen Islam Archiv Projekt gebraucht und habe mir gedacht, dass ich das mit euch hier teilen könnte. Ich werde noch eine Landingpage programmieren, wo ihr eure Javascript Objekte eingeben könnt und als Endergebnis ein JSON Objekt bekommt. Aktuell jedoch habe ich ganz andere Prioritäten.

Themen

Javascript JSON php Programmieren Python Technik Website

Beitrag teilen

WhatsAppen

Folgen Sie uns