2010-09-26 7 views
1

J'ai un fichier texte qui est formaté comme JSON, mais dans un format convivial d'impression/affichage et je veux convertir cette chaîne en JSON valide. Fondamentalement, je veux lire le fichier en utilisant PHP5 et appelez json_decode pour désérialiser la chaîne. Mais, json_decode n'est pas capable d'analyser la chaîne json "imprimable".Convertir JSON en format d'impression en JSON valide

Je reçois l'erreur 4 JSON non valide ou mal formé.

Il semble que quelqu'un d'autre avait un problème similaire que moi: PHP json_decode() returns NULL with valid JSON?

J'utilise notepad ++ pour écrire le fichier JSON.

Alors, comment puis-je convertir

DE:

{ 
    "data": [ 
     { 
      "thumbImg": "thumbImg", 
      "street": "street", 
      "city": "Fort Worth", 
      "state": "Texas", 
      "zip": "76192-0001", 
      "url": "url" 
     } 
    ] 
} 

À:

{"data":[{"thumbImg": "thumbImg", "street": "street", "city": "Fort Worth", "state": "Texas", "zip": "76192-0001", "url": "url"}] 

J'ai même essayé de faire ce qui suit:

<?php 
$filename = "links.json"; 
$file = fopen($filename, "r"); 

$lines = file($filename); 

$data = ""; 
; 
foreach ($lines as $line_num => $line) { 
    $formatted = trim($line); 
    $formatted = str_replace("\r", "", $formatted); 
    $formatted = str_replace("\n", "", $formatted); 
    $data .= $formatted;   
} 

$json = json_decode($data, true); 
?> 

J'ai fait un var_dump de la chaîne json résultante et http://jsonlint.com/ l'a marqué comme valide json; cependant, json_decode n'est pas capable de désérialiser la chaîne json pour une raison quelconque.

Merci!

SOLUTION Je définis le codage du fichier texte sur UTF-8 sans nomenclature et cela fonctionne correctement maintenant. Merci à tous!

+0

Les données parse sans problème pour moi. – Quentin

+0

Cela fonctionne quand je lis à partir d'un fichier texte (sans me moquer de reformater le texte). On dirait que vous avez commencé avec "J'ai des problèmes à lire un fichier" mais vous avez fini par vous demander "Comment reformater ce fichier?", Qui est à plusieurs étapes du problème réel et qui a entraîné une question n'est utile à personne. – Quentin

+2

'json_decode' fonctionne parfaitement pour moi: http://codepad.org/wcNFa2F5 Vous devriez essayer' file_get_contents' pour lire le fichier: http://php.net/manual/fr/function.file-get-contents.php –

Répondre

5
<?php 
$filename = "links.json"; 
$file = file_get_contents($filename);  

$json = json_decode($file, true); 
?> 


Références:
- file_get_contents()
- json_decode()

+0

Merci. Il s'avère que l'encodage de fichier de mon fichier texte était désactivé. J'ai changé l'encodage du fichier source en UTF-8 sans BOM et ça marche super bien maintenant! merci à tous pour votre soutien! – Abe