[]
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ı?
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ı?
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"}]
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.)
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.
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.
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