# [JSON] Wie Splitten?



## manniL| (28. Sep 2011)

Heyho Leute,

ich wollte fragen wie man diesen JSON Code am besten splitten könnte:
[XML][{"eg_transactionid":"73797","eg_from":"3647063","eg_fromusername":".M\u00f8rris'","eg_to":"604972","eg_tousername":"ManniL","amount":"26","note":"","dateline":"1317131649"},{"eg_transactionid":"73796","eg_from":"604972","eg_fromusername":"ManniL","eg_to":"3493469","eg_tousername":".-ExPeN\u0099","amount":"50","note":"Back 4 Intro","dateline":"1317131002"},{"eg_transactionid":"73586","eg_from":"3288141","eg_fromusername":"Roach'","eg_to":"604972","eg_tousername":"ManniL","amount":"420","note":"","dateline":"1316981450"},{"eg_transactionid":"73470","eg_from":"3575360","eg_fromusername":"ArianaGrande.","eg_to":"604972","eg_tousername":"ManniL","amount":"65","note":"","dateline":"1316951200"},{"eg_transactionid":"73463","eg_from":"3003833","eg_fromusername":"Dustin22","eg_to":"604972","eg_tousername":"ManniL","amount":"35","note":"","dateline":"1316947959"},[/XML]

Ich möchte diesen in ein jTextPane einfügen. Am wichtigsten ist: eg_tousername, amount, eg_fromusername, note.

MfG

manniL


----------



## eRaaaa (28. Sep 2011)

google-gson - A Java library to convert JSON to Java objects and vice-versa - Google Project Hosting
user guide:
Gson User Guide - gson


----------



## manniL| (28. Sep 2011)

Habe ich mir schon angeschaut und auch probiert zu benutzen.

Leider blick ich nich ganz durch ^^


----------



## eRaaaa (28. Sep 2011)

Beispiel anhand deines Json-Strings:

```
public class App {

	public static void main(String[] args) throws Exception {
		String json = "[{\"eg_transactionid\":\"73797\",\"eg_from\":\"3647063\",\"eg_fromusername\":\".M\u00f8rris'\",\"eg_to\":\"604972\",\"eg_tousername\":\"ManniL\",\"amount\":\"26\",\"note\":\"\",\"dateline\":\"1317131649\"},{\"eg_transactionid\":\"73796\",\"eg_from\":\"604972\",\"eg_fromusername\":\"ManniL\",\"eg_to\":\"3493469\",\"eg_tousername\":\".-ExPeN\u0099\",\"amount\":\"50\",\"note\":\"Back 4 Intro\",\"dateline\":\"1317131002\"},{\"eg_transactionid\":\"73586\",\"eg_from\":\"3288141\",\"eg_fromusername\":\"Roach'\",\"eg_to\":\"604972\",\"eg_tousername\":\"ManniL\",\"amount\":\"420\",\"note\":\"\",\"dateline\":\"1316981450\"},{\"eg_transactionid\":\"73470\",\"eg_from\":\"3575360\",\"eg_fromusername\":\"ArianaGrande.\",\"eg_to\":\"604972\",\"eg_tousername\":\"ManniL\",\"amount\":\"65\",\"note\":\"\",\"dateline\":\"1316951200\"},{\"eg_transactionid\":\"73463\",\"eg_from\":\"3003833\",\"eg_fromusername\":\"Dustin22\",\"eg_to\":\"604972\",\"eg_tousername\":\"ManniL\",\"amount\":\"35\",\"note\":\"\",\"dateline\":\"1316947959\"}]";
		Type collectionType = new TypeToken<Collection<Transaction>>(){}.getType();
		Collection<Transaction> transactions = new Gson().fromJson(json, collectionType);
		for (Transaction transaction : transactions) {
			System.out.println(transaction);
		}
	}

}
class Transaction{
	//evtl. namen + datentyp anpassen TODO
	@SerializedName("eg_transactionid")
	String id;
	@SerializedName("eg_from")
	String from;
	@SerializedName("eg_fromusername")
	String fromuser;
	@SerializedName("eg_to")
	String to;
	@SerializedName("eg_tousername")
	String toUser;
	int amount;
	String note;
	String dateline;
	
	//getter + setter TODO
	
	@Override
	public String toString() {
		return "Transaction [id=" + id + ", from=" + from + ", fromuser="
				+ fromuser + ", to=" + to + ", toUser=" + toUser + ", amount="
				+ amount + ", note=" + note + ", dateline=" + dateline + "]";
	}
}
```

easy oder?


----------



## manniL| (28. Sep 2011)

Ja, danke 

Hab viel zu kompliziert gedacht.


----------



## manniL| (28. Sep 2011)

Sry wegen dem Doppelpost, aber wie füge ich jetzt die Transactiondetails in das Editorpane ein?


----------



## eRaaaa (28. Sep 2011)

? Wobei gibts da jetzt genau Probleme? Du hast jetzt viele Transaction-Objekte...dort holst du dir eben mit den entsprechenden getter-Methoden (bestenfalls) die Werte und fügst sie in deine Editorpane ein ???:L:bahnhof:


----------



## manniL| (28. Sep 2011)

Und mit welchen kann ich das anstellen (Wie gesagt, bin mit getter und setter nicht gerade sehr vertraut ^^).


----------



## eRaaaa (28. Sep 2011)

manniL| hat gesagt.:


> Und mit welchen kann ich das anstellen (Wie gesagt, bin mit getter und setter nicht gerade sehr vertraut ^^).



? Du bist mit gettern+settenr nicht vertraut, willst aber eine Anwendung mit grafischer Oberfläche und Parsen von JSON-Strings erstellen? oO 

Und du kannst vlt auch anfangen etwas ausführlichere Posts zu schreiben, denn ein 
"aber wie füge ich jetzt die Transactiondetails in das Editorpane ein? " darauf kann man jetzt antwortne wie man lustig ist.
Wie soll das Ganze denn im Editorpane dargestellt werden? Wie sieht dein bisheriger Code aus etc.
How to Use Editor Panes and Text Panes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
hilft das vlt ?


----------



## manniL| (28. Sep 2011)

Oh man, sry.

Habe ausversehen als String transaction, statt transactions benutzt und deshalb nur eine Transaktion angezeigt bekommen.

Danke, ist erledigt


----------



## manniL| (29. Sep 2011)

Eigentlich funktionier nun Alles, nur das Problem ist folgendes:


```
String json = builder.toString(); 
		     Type collectionType = new TypeToken<Collection<Transaction>>(){}.getType();
		        Collection<Transaction> transactions = new Gson().fromJson(json, collectionType);
		        for (Transaction transaction : transactions) {
				      jTextPane1.setText(transactions.toString());
		        }

		        
		        

		    }
            class Transaction{
		    //evtl. namen + datentyp anpassen TODO
		    @SerializedName("eg_fromusername")
		    String fromuser;
		    int amount;
		    String note;
		    
		    //getter + setter TODO
		    
		    @Override
		    public String toString() {
		        return "User="
		                + fromuser + " Amount=" + amount + "e*G" + " Note=" + note + "\n";
		    
		    
		}
            }
```

Mit dem Code bekomme ich folgendes Ergebnis:

```
[User=XYZ Amount=XYZ Note=XYZ
,Schema wie oben
```

Wie bekomm ich nun die Brackets und die Kommas weg?


----------



## eRaaaa (29. Sep 2011)

Indem du versuchst du verstehen was der Code macht,.

```
for (Transaction transaction : transactions) {
                      jTextPane1.setText(transactions.toString());
                }
```

  jTextPane1.setText(transaction*s*.toString());
-->
  jTextPane1.setText(transaction.toString());

(wobei das setText wenig Sinn macht innerhalb einer Schleife.....)


----------



## manniL| (29. Sep 2011)

Das hatte ich schon probiert, nur wie du schon gesagt hast, hat es in der Schleife keinen Sinn :/


----------



## eRaaaa (29. Sep 2011)

Was du suchst ist so etwas wie eine append(anhänge)-Methode!
Die gibts so aber nicht bei einem EditorPane wie bei der Textarea.
Das hat aber alles jetzt nichts mehr mit JSON bzw dem eigentlichen Thema zu tun. Das sind Swing-Grundlagen
Du kannst dir über getDocument das Dokument holen und dann dort insertString aufrufen!


----------



## manniL| (29. Sep 2011)

Danke dir, ich probiers


----------

