Regex JSON

  • Themenstarter Themenstarter Karotte21
  • Beginndatum Beginndatum
K

Karotte21

Gast
Guten Tag,

Ich habe folgendes Problem:

Meine application bekommt von der FB Graph API JSON daten zurück, die ich bereits in ein JSON Eintrag geparst habe.. hier 2 paar sample-Einträge aus dem Array:

INFO: {"message":"Points: 274; Name: patrick","id":"182396081803634_206549349388307","application":{"id":"182396081803634","name":"EWA_SS11"},"from":{"id":"182396081803634","name":"EWA_SS11"},"created_time":"2011-06-15T10:52:06+0000","type":"status","updated_time":"2011-06-15T10:52:06+0000"}
INFO: {"message":"Points: 294; Name: lukas","id":"182396081803634_206549026055006","application":{"id":"182396081803634","name":"EWA_SS11"},"from":{"id":"182396081803634","name":"EWA_SS11"},"created_time":"2011-06-15T10:50:29+0000","type":"status","updated_time":"2011-06-15T10:50:29+0000"}

Ich bin nun genau in den "message":"Points: Name:" part interessiert, also schaut mein javaRegex wie folgt aus:
Java:
Pattern p = Pattern.compile("\"message\":\".*?\"");
Matcher m;

//Und schließlich in der for schleife//
item = result.get(i);
m = p.matcher(item.toString());

item.toString entspricht genau den oben geposteten strings!

Was ist nun mein Problem?
Nun, laut RegEx: online regular expression testing match der Regex von weiter oben genau das was ich brauche, nämlich "group(0) => "message":"Points: 294; Name: lukas""

Der Regex ist ja sehr simpel, ich bin ja nicht dumm :>

Im Javaprogramm tut er das jedoch nicht, sobald ich versuche auf group(0) zuzugreifen, bekomme ich ein INFO: java.lang.IllegalStateException: No match found;

Und nun der Witz: Selbst mit einem ".*" als Regex (der bei p.matches("REGEX", "STRING") true ausgibt, krieg ich bei p.matcher und dem Versuch aus group zu lesen genau die gleiche Exception!

Wo ist mein Denkfehler? Ich programmier normalerweise in allem, nur nicht in Java, aber dennoch sollte so was simples doch machbar sein 😵

Ich sollte vielleicht noch dazu sagen, dass das ganze eine ICEFaces app ist und im Browser läuft, aber soweit ich das sehe verwende ich doch eh die standard java regex class.. also sollte das keinen Unterschied machen!
 
Zuletzt bearbeitet von einem Moderator:
extreme Denkfehler treten hier schon bei der Formulierung eines Forum-Posts auf, was ist da fürs Programmieren zu erwarten 😉

keinen sinnvollen Code geposten (wird je eine match() oder find()-Methode aufgerufen?)
und kein sinnvolles Beispiel
Java:
public class Test {
    public static void main(String[] args)  {
        String st = "INFO: {\"message\":\"Points: 274; Name: patric\"";

        Pattern p = Pattern.compile("\"message\":\".*\"");
        Matcher m = p.matcher(st);
        while (m.find())   {
            System.out.println(m.group());
            System.out.println(m.group(0));
        }
    }
}
funktioniert wie zu erwarten war
 
Naja, mein Gedanke war: "Ich hab doch eh schon die Einträge und will doch nur die paar worte rausmatchen, und der Regex geht auch sehr einfach.." -> Ich dachte die Regex Variante wär schneller als "schaun was das kann was ich will" -> "library downloaden" -> "implementieren" !

Öhm hier ist der sinnvolle Code, tut mir leid falls das zu unleserlich war:

Java:
 @Override
    public List<Score> getHighScoreList() throws Exception
    {
        JsonObject myfeed = this.fc.fetchObject(FB_API_KEY+"/feed", JsonObject.class);
        JsonArray result = myfeed.getJsonArray("data");
        Object item;
        Pattern p = Pattern.compile("\"message\":\".*?\"");
        Matcher m;
        String match;

        for(int i = 0; i < result.length(); i++)
        {
            item = result.get(i);
            m = p.matcher(item.toString());
            System.out.println(item.toString());
            match = m.group(0);
            //System.out.println(match);
        }
        return null;
    }

*Edit* Oh ich habe wohl ein m.find() vergessen, dachte das würde wie beim C# Regex.Matches() direkt erledigt.. naja dann wirds das wohl gewesen sein, danke dir!
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben