2016-07-25 30 views
-1

ich eine Reihe von gemischtem Inhalt habe, so etwas wie:Extract json aus gemischtem Inhalt String

{json Sachen} Andere Inhalte aus demselben Ausgang hat < html> Tags wie < div> einig </div> und mehr Material, am Ende hat es eine andere {json Sachen}

Also, was ich brauche, sind in der Lage sein, diese drei Elemente zu verwenden:
So die erste json zu bekommen ich dies tun:

$first_json = json_decode(substr($mixed_string,0, strpos($mixed_string,"}")+1)); 
// that will get me the first json content 
// Then I need the second json which is at the end of the string, 
// the length of the string is unknown , the json length is unknown 
// after that I just do: 
echo preg_replace("/\{[^)]+\}/","",$mixed_string); 
// and I get the html from that string... 

Also, wie kann ich den letzten Json bekommen?

+0

Verwendung 'strrpos' finden die letzte' { 'in der Zeichenfolge, dann substr von dort bis zum Ende? –

+0

@MarcB Funktioniert nicht an '{" a ":" b "} {" a ": {" b ":" c "}}'. – Siguza

+1

@Siguza: natürlich nicht, was die richtige Antwort "reparieren, was auch immer aus diesem Müll spuckt, so gibt es PROPER JSON". –

Antwort

0

Sie können Regex verwenden, um die JSON-Werte abzurufen, und Sie können den JSON aus jeder beliebigen Zeichenfolge herausziehen, unabhängig von der Länge. Angenommen, Sie haben ein div mit einer ID von Inhalten, und dem div JSON wollen haben Sie extrahieren:

EDIT: hinzugefügt, um den Extraktionsprozess als Funktion.

function extractJSON(content) { 
 
    var regex = /({.*?})/g, 
 
    raw = content.match(regex), 
 
    output = [], 
 
    errors = []; 
 

 
    raw.forEach(function(el) { 
 
    try { 
 
     output.push(JSON.parse(el)); 
 
    } catch (e) { 
 
     errors.push('issue with object: ' + el); 
 
    } 
 
    }); 
 

 
    return { 
 
    results: output, 
 
    errors: errors 
 
    } 
 
} 
 

 
// Grab the elements that contain JSON 
 
var elements = document.getElementById('content').innerHTML; 
 

 
console.log(extractJSON(elements));