[]

text tosyasını json haline çevirmek C#

merhaba,

bir script ile oluşturduğum txt biçiminde dosyam var. bunu json formatına çevirmek istiyorum. dosya formatım şuan şöyle;


<tr>
<td>
25.08.2017
</td>

<td>
lorem ipsum
</td>
</tr>

<tr>
<td>
31.08.2017
</td>

<td>
dolor sit amet
</td>
</tr>

split metodunu kullanarak döngü içine döngü yazıp, noktasını virgülünü parantezini kendim koyayım istedim ama içiçe döngüleri doğru düzgün yazamadım. tarih * içerik adetince döngüye giriyor. döngüyü nasıl yazarım ya da json'a çevirmek için daha kolay bir yol var mı?

 
iç içe for'a gerek yokmuş. tr, td'leri kaldırıp tek bir ifade yaptım ve ona böldüm. aşağıdaki şekilde ayrı ayrı kullanabildim.

for (int i = 0; i < newText.Length; i++)
{
if (i % 2 == 0)
{
Console.WriteLine("tarih: " + newText[i] );
Console.WriteLine("icerik: " + newText[i + 1]);
}
}

şimdi aldığım string ifadelerle köşeli parantez, süslü parantez virgül falan ekleyeceğim.

bu amele yöntemi midir? daha profesyonel bir cevabınız var mı?
  • dahinnotha  (01.09.17 00:36:15 ~ 00:37:45) 
Kod:

public class Entry
{
public DateTime date;
public string text;
}

List<Entry> list = new List<Entry>();
list.Add(new Entry() { date = new DateTime(2017, 8, 25), text = "lorem ipsum" });
list.Add(new Entry() { date = new DateTime(2017, 8, 31), text = "dolor sit amet" });
Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer();
using (StringWriter sw = new StringWriter())
{
serializer.Serialize(sw, list);
Console.Out.WriteLine(sw.ToString());
}


Çıktısı :

[{"date":"2017-08-25T00:00:00","text":"lorem ipsum"},{"date":"2017-08-31T00:00:0
0","text":"dolor sit amet"}]
  • iron  (01.09.17 01:09:40) 
Birbiri ile alakasız şeyleri aynı array içine toplamak amele bir yöntem evet. Bir yerden bu datayı alıp parse etmeye çalışıyorsun anladığım kadarıyla. Bu iş için class'lar oluşturup belli bir hiyerarşide bir veriyapısında tutabilirsin. Sonrası için de yazdığım örnekteki gibi serialize edilmiş json string'i üretebiliyorsun. Bunu string birleştirme yoluyla kendin yapmaya çalışmak da çok profesyonelce olmaz.

Tabii ileride Dictionary vesaire kullandığında profesyonel yöntemin de başka zorlukları var.

Parse etmeye çalıştığın sayfa Xhtml compliant ise parse işin dom üstünden de yapabilirsin. Bir ara ekşi sözlük için kitlengeç diye bir başlığı takip etmek için bir şeyler yapmıştım. Ekşi'yi ssg daha yeni xhtml compliant yapmıştı o zamanlar. (Hedef ekşi ise bunu bir değerlendir.)
  • iron  (01.09.17 01:15:28) 
teşekkür ederim. veriyi c# ta oluşturmuyorum. veri zaten txt olarak başka bir ortamda oluşturuluyor. script dediğim de javascript değil. autohotkey'de yazdığım bir kod.

ben ilk cevabımdaki gibi bölüp köşeli parantez falan ekledim. düşündüğüm kadar zor olmadı, hatta belki birine lazım olur;

Console.Write("data = '[");
//0'ıncı index'i atlıyorum çünkü o null geliyor.
for (int i = 1; i < newText.Length; i++)
{
if (i % 2 == 1)
{
Console.Write("{");
}
if (i % 2 == 1)
{
Console.Write("\"tarih\":\"" + newText[i] + "\"");
Console.Write(", \"icerik\":\"" + newText[i + 1] + "\"");
}
if (i % 2 == 0)
{
Console.Write("},");
}
}
Console.Write("{}]';");

kod çok sağlıklı değil farkındayım, kendi kişisel kullanımım için yazdığım bir şey bu.
  • dahinnotha  (01.09.17 01:50:27) 
client tarafında direk bu işi ufak bir jquery plugin ile yapabilirsin.

jsfiddle.net

işi client tarafında halletmek daha iyi olabilir.
  • qobel  (01.09.17 13:09:41) 
bu tarz html'den data çekmek için php ile phpquery tadında bi eklenti kullanmıştım zamanında. C# ile de bi html parser varsa onu kullanarak çekebilirsin


  • yuto  (01.09.17 15:16:23) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.