PHP json_decode () geçerli JSON ile null döndürür?

6 Cevap php

Ben bir düz metin dosyası saklanan bu JSON nesnesi vardır:

{
    "MySQL": {
        "Server": "(server)",
        "Username": "(user)",
        "Password": "(pwd)",
        "DatabaseName": "(dbname)"
    },
    "Ftp": {
        "Server": "(server)",
        "Username": "(user)",
        "Password": "(pwd)",
        "RootFolder": "(rf)"
    },
    "BasePath": "../../bin/",
    "NotesAppPath": "notas",
    "SearchAppPath": "buscar",
    "BaseUrl": "http:\/\/montemaiztusitio.com.ar",
    "InitialExtensions": [
        "nem.mysqlhandler",
        "nem.string",
        "nem.colour",
        "nem.filesystem",
        "nem.rss",
        "nem.date",
        "nem.template",
        "nem.media",
        "nem.measuring",
        "nem.weather",
        "nem.currency"
    ],
    "MediaPath": "media",
    "MediaGalleriesTable": "journal_media_galleries",
    "MediaTable": "journal_media",
    "Journal": {
        "AllowedAdFileFormats": [
            "flv:1",
            "jpg:2",
            "gif:3",
            "png:4",
            "swf:5"
        ],
        "AdColumnId": "3",
        "RSSLinkFormat": "%DOMAIN%\/notas\/%YEAR%-%MONTH%-%DAY%\/%TITLE%/",
        "FrontendLayout": "Flat",
        "AdPath": "ad",
        "SiteTitle": "Monte Maíz: Tu Sitio",
        "GlobalSiteDescription": "Periódico local de Monte Maíz.",
        "MoreInfoAt": "Más información aquí, en el Periódico local de Monte Maíz.",
        "TemplatePath": "templates",
        "WeatherSource": "accuweather:SAM|AR|AR005|MONTE MAIZ",
        "WeatherMeasureType": "1",
        "CurrencySource": "cotizacion-monedas:Dolar|Euro|Real",
        "TimesSingular": "vez",
        "TimesPlural": "veces"
    }
}

When I try to decode it with json_decode(), it returns NULL. Why? The file is readable (I tried echoing file_get_contents() and it worked ok).

I http://jsonlint.com/ karşı JSON test ettik ve mükemmel geçerli bulunuyor.

Burada ne oldu?

Solution

Looking for answers on Google, I got back to SO: json_decode returns NULL (php). My JSON file had the UTF BOM sequence (some binary chars that shouldn't be there), thus, breaking the JSON structure. Went to Hex Editor, erased the bytes. Everything's back to normal. Why has this happened? Because I edited the file using Microsoft Windows' Notepad. Terrible idea!

6 Cevap

i am a Chinese developer and i am lose my English. This is a easy job. you should have known that json as text and you check the request in Chrome. You can find this problem the json is added blank code. so.you must clear it.Now,you can use $k=preg_replace('/\s+/', '',$k); after you can json_decode($k)

print_r () onun kolay bir iş ve mutlu her geliştiriciler bulacaksınız dizi göstermek için

$ K = preg_replace ('/ \ s + /','', $ k); Benim için yaptım. Ve evet, Chrome üzerinde test. User2254008 Thx

Kullanarak Jürgen Matematik belirttiği gibi user2254008 tarafından listelenen preg_replace yöntem de benim için sabit.

(-> UTF8, en azından benim durumumda, Unicode) Bu i olmamdı tüm sorunlar giderildi Bu Chrome ile sınırlı değildir, bu bir karakter kümesi dönüşüm bir sorun gibi görünüyor.

Gelecekteki bir düğüm olarak, ben çözme edildi json nesne Python json.dumps işlevi geldi. Bu da kolayca ele olsa karşısında bunu yapmak için diğer bazı sağlıksız verileri neden oldu.

Sadece ben bugün bu konuda koştum ben, bu eklemek düşündüm. Lütfen json dize çevreleyen herhangi bir dize dolgu varsa, json_decode null dönecektir.

Eğer bir PHP değişkeni başka bir kaynaktan JSON çekerek ediyorsanız, önce onu "kesmek" için akıllıca olacaktır:

$jsonData = trim($jsonData);

Ben aynı sorunu vardı ve ben çöz önce tırnak karakteri yerine sadece bunu çözdü.

$json = str_replace('"', '"', $json);
$object = json_decode($json);

Benim JSON değer JSON.stringify fonksiyonu ile oluşturulmuştur.