[php] PHP json_decode ()는 유효한 JSON으로 NULL을 반환합니까?

이 JSON 개체는 일반 텍스트 파일에 저장되어 있습니다.

{
    "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"
    }
}

로 디코딩하려고하면 json_decode()NULL이 반환됩니다. 왜? 파일을 읽을 수 있습니다 (반향을 시도했지만 정상적으로 file_get_contents()작동했습니다).

http://jsonlint.com/ 에 대해 JSON을 테스트 했으며 완벽하게 유효합니다.

여기서 뭐가 잘못 됐나요?

해결책

Google에서 답변을 찾고 SO : json_decode returns NULL after webservice call . 내 JSON 파일에는 UTF BOM 시퀀스 (있을 수없는 일부 이진 문자)가 있으므로 JSON 구조가 손상되었습니다. 16 진수 편집기로 이동하여 바이트를 지 웠습니다. 모든 것이 정상으로 돌아 왔습니다. 왜 이런 일이 발생 했습니까? Microsoft Windows의 메모장을 사용하여 파일을 편집했기 때문입니다. 끔찍한 생각!



답변

특수 문자의 인코딩 일 수 있습니다. 명확한 정보를 얻기 위해 json_last_error () 를 요청할 수 있습니다.

업데이트 : 문제가 해결되었습니다. 질문의 “해결 방법”단락을보십시오.


답변

이것은 나를 위해 일했습니다.

json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string), true );


답변

시도해 볼 수 있습니다.

json_decode(stripslashes($_POST['data']))


답변

크롬에서 요청을 확인하면 JSON이 텍스트 인 것을 볼 수 있으므로 JSON에 빈 코드가 추가되었습니다.

다음을 사용하여 지울 수 있습니다.

$k=preg_replace('/\s+/', '',$k);

그런 다음 다음을 사용할 수 있습니다.

json_decode($k)

print_r 그러면 배열이 표시됩니다.


답변

나는 똑같은 문제가 있었고 디코딩하기 전에 따옴표 문자를 대체하여 간단히 해결했습니다.

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

내 JSON 값은 JSON.stringify 함수에 의해 생성되었습니다.


답변

숨겨진 문자가 json을 엉망으로 만들 수 있습니다.

$json = utf8_encode($yourString);
$data = json_decode($json);


답변

$k=preg_replace('/\s+/', '',$k); 

나를 위해 해냈어. 예, Chrome에서 테스트합니다. 사용자에게 Thx