Soru JSON dosyası üzerindeki bilgiler ile altına yeni veri giriş nasıl yapılır?

Bu konuyu okuyanlar

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Herkese merhaba,

elimde şu şekilde bir json dosyası bulunuyor
JSON:
{
 "kadinalt": [
  {
   "name": "Üst Giyim Tüm Ürünler",
   "url": "https://www.site.com/ust-giyim",
   "kadinson": [
    {
     "name": "Elbise",
     "url": "https://www.site.com/elbise"
    },
    {
     "name": "Pijama Üst",
     "url": "https://www.site.com/pijama-ust"
    }
   ]
  },
  {
   "name": "Alt Giyim Tüm Ürünler",
   "url": "https://www.site.com/alt-giyim",
   "kadinson": [
    {
     "name": "Pijama Altı",
     "url": "https://www.site.com/pijama-alti"
    }
   ]
  },
  {
   "name": "Dış Giyim Tüm Ürünler",
   "url": "https://www.site.com/dis-giyim",
   "kadinson": [
    {
     "name": "Hırka",
     "url": "https://www.site.com/hirka"
    },
    {
     "name": "Mont",
     "url": "https://www.site.com/mont"
    },
    {
     "name": "Kaban",
     "url": "https://www.site.com/kaban"
    }
   ]
  },
  {
   "name": "İç Giyim Tüm Ürünler",
   "url": "https://www.site.com/ic-giyim",
   "kadinson": [
    {
     "name": "Pijama Takımı",
     "url": "https://www.site.com/pijama-takimi"
    },
    {
     "name": "Sütyen Takım",
     "url": "https://www.site.com/sutyen-takim"
    },
    {
     "name": "Atlet",
     "url": "https://www.site.com/atlet"
    }
   ]
  },
  {
   "name": "Özel Gün Tüm Ürünler",
   "url": "https://www.site.com/ozel-gun",
   "kadinson": [
    {
     "name": "Abiye",
     "url": "https://www.site.com/abiye"
    }
   ]
  }
 ]
}

Bu dosya içerisindeki URL'leri regex ile sırası ile aldım. URL metadata verilerini çekerek img URL'lerine de ulaştım ancak sorun şu bu img bağlantılarını hızlı bir biçimde aşağıdaki şekle nasıl getirebilirim?
JSON:
{
"kadinalt": [
  {
   "name": "Üst Giyim Tüm Ürünler",
   "url": "https://www.site.com/ust-giyim",
   "img": "https://www.site.com/ust-giyim.png"
   "kadinson": [
    {
     "name": "Elbise",
     "url": "https://www.site.com/elbise",
     "img": "https://www.site.com/elbise.png"
    },
    {
     "name": "Tişört",
     "url": "https://www.site.com/tisort",
     "img": "https://www.site.com/tisort.png"
    }
   ]
  }
 ]
}
Yardımlarınız için şimdiden teşekkürler.
 

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
Hocam çok karışık duruyor bu, tam olarak ne yapmaya çalışıyorsunuz?
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Hocam çok karışık duruyor bu, tam olarak ne yapmaya çalışıyorsunuz?
hocam istediğim işlev basit aslında şu şekilde anlatabilirim json dosyasında değişiklik yapmak yerine iki dosyayıda txt olarak ele alırsak elimde iki adet txt dosyası var. birisinde "name","url", "img" bilgileri var. diğerinde ise img: "" değerinin karşılığı olan linkler sırası ile alt alta txt dosyası içerisinde.

bu linkleri sıfırncı değeri diğer dosyadaki sıfırıncı img tutucusu ile yer değiştirmesini sonrasında birinci, ikinci, üçüncü olarak devam etmesini istiyorum.

yazılım bilgim olmadığı için diğer programlar aracılığı ile değiştirmeye çalıştım ancak başarılı olmadı.
basit bir kural girerek oluşturabileceğim bir program var mı? nasıl yapabilirim bunu merak ediyorum.
 

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
yazılım bilgim olmadığı için diğer programlar aracılığı ile değiştirmeye çalıştım ancak başarılı olmadı.
basit bir kural girerek oluşturabileceğim bir program var mı? nasıl yapabilirim bunu merak ediyorum.
Bir sürü programlama dili var bunun için, online js editörlüyle rahatça yapabiliriz bunu.
Ben şöyle anladım, sizin 2 dosyanız var, 2. Dosyadaki img'lerin hepsini 1. Dosyaya uygun sırayla yazmaya çalışacaksınız sanırım.

Örnek kod verebilirim ama tam yazınca çalışaması için dosyaları görsek daha iyi olur. Yoksa jsde küçük bir döngüyle hepsi halledilebiliyor.

JavaScript:
const eski=[]//sizin 1. Dosya
const imgler=[]//sizin 2. Dosya
const sonuc=[]

for (let i=0;i<eski.length;i++)
    sonuc.push({...eski[i], img: imgler[i]})

console.log(JSON.stringify(sonuc))
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Bir sürü programlama dili var bunun için, online js editörlüyle rahatça yapabiliriz bunu.
Ben şöyle anladım, sizin 2 dosyanız var, 2. Dosyadaki img'lerin hepsini 1. Dosyaya uygun sırayla yazmaya çalışacaksınız sanırım.

Örnek kod verebilirim ama tam yazınca çalışaması için dosyaları görsek daha iyi olur. Yoksa jsde küçük bir döngüyle hepsi halledilebiliyor.

JavaScript:
const eski=[]//sizin 1. Dosya
const imgler=[]//sizin 2. Dosya
const sonuc=[]

for (let i=0;i<eski.length;i++)
    sonuc.push({...eski[i], img: imgler[i]})

console.log(JSON.stringify(sonuc))
bunu deneyeceğim teşekkürler.
bende python ile birşeyler yapmaya çalışıyordum ama başaramadım kodlama konusunu kesinlikle bilmiyorum :)

onuda buraya ekleyeyim problemi çözülürse belki başkalarıda kullanabilir.
hata: SyntaxError: invalid syntax satır:7
JavaScript:
dosyalar = [os.path.join("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje", "img.txt"),
	os.path.join("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje", "anakategori-imgversiyon.json") 
]

# img.txt dosyasını oku

def oku_imgtxt("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\img.txt"):
	with open("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\img.txt", 'r') as img.txt:
		return dosya.read("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\img.txt")

# anakategori-imgversiyon.json dosyası

AI: # anakategori-imgversiyon.json dosyasını oku 
def oku_json("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\anakategori-imgversiyon.json"):
    with open("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\anakategori-imgversiyon.json", 'r') as anakategori-imgversiyon.json:
        return json.load(anakategori-imgversiyon.json)

"C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\img.txt" = dosyalar[0]
"C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\anakategori-imgversiyon.json" = dosyalar[1]
img_url = oku_imgtxt("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\img.txt").split(",")
anakategori = oku_json("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\anakategori-imgversiyon.json")
sayac = 0
for alt_kategori in anakategori:
    alt_kategori["img"] = img_url[sayac]
    sayac += 1

print(alt_kategori["img"])

import img.txt
import anakategori-imgversiyon.json

print(alt_kategori["img"])

print(alt_kategori["img"])
with open("C:\\Users\\m-e-1\\Desktop\\des.co\\app-proje\\anakategori-imgversiyon.json", 'w') as dosya:
    json.dump(anakategori, dosya)
	
	dosyalar[1].close()
	print("Görseller başarıyla güncellendi.")
Mesaj otomatik birleştirildi:

Bir sürü programlama dili var bunun için, online js editörlüyle rahatça yapabiliriz bunu.
Ben şöyle anladım, sizin 2 dosyanız var, 2. Dosyadaki img'lerin hepsini 1. Dosyaya uygun sırayla yazmaya çalışacaksınız sanırım.

Örnek kod verebilirim ama tam yazınca çalışaması için dosyaları görsek daha iyi olur. Yoksa jsde küçük bir döngüyle hepsi halledilebiliyor.

JavaScript:
const eski=[]//sizin 1. Dosya
const imgler=[]//sizin 2. Dosya
const sonuc=[]

for (let i=0;i<eski.length;i++)
    sonuc.push({...eski[i], img: imgler[i]})

console.log(JSON.stringify(sonuc))

Bu konuları bilmediğim için çalıştıramadım sanırım yardımcı olabilir misiniz?


online editör içerisine dosyalar ile yükledim.
 
Son düzenleme:

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
Python kodundaki hatanın sebebi fonksiyon tanımlanırken parametre yerine değer girilmesi. Şuan evde değilim ama geçince kesinlikle çözeriz bunu.

Hocam bir de js kodunda şey yapman lazımdı, bak o çalışabilirdi yani, şu eski yazanın içine direkt json dosyasının içini yazıyoruz.
const eski =[{tip:"kadın",img:""},{tip:"kadın2",img:""}]

Aynı şekilde bir altındaki değişken de img.txtnın iciyle doldurulacak direkt.
const imgler=[

"Resmlink1","resimlink2"

]
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Python kodundaki hatanın sebebi fonksiyon tanımlanırken parametre yerine değer girilmesi. Şuan evde değilim ama geçince kesinlikle çözeriz bunu.

Hocam bir de js kodunda şey yapman lazımdı, bak o çalışabilirdi yani, şu eski yazanın içine direkt json dosyasının içini yazıyoruz.
const eski =[{tip:"kadın",img:""},{tip:"kadın2",img:""}]

Aynı şekilde bir altındaki değişken de img.txtnın iciyle doldurulacak direkt.
const imgler=[

"Resmlink1","resimlink2"

]
çok teşekkür ederim söylediğin şekilde online editörde işlem yaptım consolda veriler yazıyor ama img etiketi içleri hala boş görünüyor.
 

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
Hocam şöyle bir kod yazdım, nodejs ortamında çalışıyor. Sizin dosyalara göre denedim, işlevsel.
JavaScript:
const fs = require("fs")
const eski = require("./altkategorison.json")
const imgler = fs.readFileSync("./img.txt", "utf-8").split(",\r\n")
const sonuclar = {};
for (const kategori in eski)
    sonuclar[kategori] = [];

let i = 0;
for (const kategori in eski)
    for (const altkategori of eski[kategori]) {
        sonuclar[kategori].push({ ...altkategori, img: imgler[i] })
        i++;
    }


fs.writeFileSync("./sonuc.json", JSON.stringify(sonuclar))
console.log(JSON.stringify(sonuclar), sonuclar)
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Hocam şöyle bir kod yazdım, nodejs ortamında çalışıyor. Sizin dosyalara göre denedim, işlevsel.
JavaScript:
const fs = require("fs")
const eski = require("./altkategorison.json")
const imgler = fs.readFileSync("./img.txt", "utf-8").split(",\r\n")
const sonuclar = {};
for (const kategori in eski)
    sonuclar[kategori] = [];

let i = 0;
for (const kategori in eski)
    for (const altkategori of eski[kategori]) {
        sonuclar[kategori].push({ ...altkategori, img: imgler[i] })
        i++;
    }


fs.writeFileSync("./sonuc.json", JSON.stringify(sonuclar))
console.log(JSON.stringify(sonuclar), sonuclar)
Hocam çok teşekkürler, ellerine sağlık şuan tek problem var sanırım json dosyasını ekranda görüntülenen sırayla değil iç içe yapıya göre ayırıyor bu nedenle listede tamamen bir kayma söz konusu ama çıktıyı alıp çıktı sırasına göre tekrar regexle hallederim diye düşünüyorum.
//
alt yazan kategori içlerini doldurup örneğin "kadison" olarak devam edenlerin içerisini doldurmamış hocam
 
Son düzenleme:

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Hocam çok teşekkürler, ellerine sağlık şuan tek problem var sanırım json dosyasını ekranda görüntülenen sırayla değil iç içe yapıya göre ayırıyor bu nedenle listede tamamen bir kayma söz konusu ama çıktıyı alıp çıktı sırasına göre tekrar regexle hallederim diye düşünüyorum.
//
alt yazan kategori içlerini doldurup örneğin "kadison" olarak devam edenlerin içerisini doldurmamış hocam
{
kadinalt: [
{
name: 'Üst Giyim Tüm Ürünler',
url: 'https://www.example.com/ust-giyim',
img: 'http://www.example.com/logos/metaOGImage.jpg',
kadinson: [Array]
},
çıktı bu şekilde oluşuyor ve son yazan kategorilerin içeriğinde bir değişiklik yapmıyor [Array] şeklinde bırakıyor.
 

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
Stringify ile olan çıktıda array yazıp bırakmaz normalde.
Ama bi tuhaflık var sanki benim kodda yazmadığım. Kategoriyi.kategorideki elemanın içine koymus sanki o
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
sanırım ben yine yanlış anlattım hocam kusura bakma çıktı dosyası bu şekilde oluşuyor:
{ "kadinalt": [ { "name": "Üst Giyim Tüm Ürünler", "url": "https://www.example.com/ust-giyim", "img": "http://www.example.com/logos/metaOGImage.jpg", "kadinson": [ { "name": "Elbise", "url": "https://www.example.com/elbise", "img": "" }, { "name": "Pijama Üst", "url": "https://www.example.com/pijama-ust", "img": "" }, { "name": "Sweatshirt", "url": "https://www.example.com/sweatshirt", "img": "" } ] }, { "name": "Alt Giyim Tüm Ürünler", "url": "https://www.example.com/alt-giyim", "img": "http://www.example.com/category/kadinelbisemodelleri.png", "kadinson": [ { "name": "Pijama Altı", "url": "https://www.example.com/pijama-alti", "img": "" }, { "name": "Tayt", "url": "https://www.example.com/tayt", "img": "" } ] }
ama göreceğin üzere yalnızca
{ "name": "Üst Giyim Tüm Ürünler", "url": "https://www.example.com/ust-giyim", "img": "http://www.example.com/logos/metaOGImage.jpg"
ve
{ "name": "Alt Giyim Tüm Ürünler", "url": "https://www.example.com/alt-giyim", "img": "http://www.example.com/category/kadinelbisemodelleri.png",

gibi son kategorinin üstündeki veriler üzerinde değişiklik yapıyor bunların altındaki
"kadinson": [] içerisinde işlem yapmıyor ve "kadinson": [Array] olarak gösteriyor.
 

Akif9748

Asistan
Katılım
30 Ocak 2021
Mesajlar
145
Reaksiyon puanı
159
Puanları
43
Eve geçince bakaık hocam ama array yazıyorsa içi doludur onun.
 

smart038

Öğrenci
Katılım
2 Ağustos 2020
Mesajlar
10
Reaksiyon puanı
2
Puanları
3
Yaş
23
Eve geçince bakaık hocam ama array yazıyorsa içi doludur onun.
Teşekkürler hocam
Mesaj otomatik birleştirildi:

JavaScript:
const fs = require('fs');

let imgUrls = fs.readFileSync('./img.txt', 'utf8').split(',');
let data = fs.readFileSync('./altkategorison.json', 'utf8');
data = JSON.parse(data);

let urlCounter = 0;
for (let i = 0; i < data.kadinalt.length; i++) {
    if (data.kadinalt[i].img === '') {
        data.kadinalt[i].img = imgUrls[urlCounter];
        urlCounter++;
    }
    if (data.kadinalt[i].kadinson) {
        for (let j = 0; j < data.kadinalt[i].kadinson.length; j++) {
            if (data.kadinalt[i].kadinson[j].img === '') {
                data.kadinalt[i].kadinson[j].img = imgUrls[urlCounter];
                urlCounter++;
            }
        }
    }
}

for (let i = 0; i < data.erkekalt.length; i++) {
    if (data.erkekalt[i].img === '') {
        data.erkekalt[i].img = imgUrls[urlCounter];
        urlCounter++;
    }
    if (data.erkekalt[i].erkekson) {
        for (let j = 0; j < data.erkekalt[i].erkekson.length; j++) {
            if (data.erkekalt[i].erkekson[j].img === '') {
                data.erkekalt[i].erkekson[j].img = imgUrls[urlCounter];
                urlCounter++;
            }
        }
    }
}

fs.writeFileSync('\sonuc.json', JSON.stringify(data, null, 2));

console.log('Kod başarı ile çalıştırıldı!');

Hocam bu şekilde bir şey oluşturdum bu sefer son yazanların içerisindeki img lerede listeden ekliyor ancak Kadinalt içerisinde üst giyim img etiketini kadinson içerisindeki 1. img karşısına da yazıyor sonra txt dosyasındaki sıraya göre ekliyor
 
Son düzenleme:

Son mesajlar

Üst