Json не работает

Discussion in 'PHP' started by InfectedM, 16 Nov 2015.

  1. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    Спарсил инфу с сайта, создал много вложенный массив и сконвертировал его в Json получилась такая текстовка:
    После этого, в том же проекте его расшифровал через
    функцию json_decode($json,true);
    все ок - расшифровалось. сохранил в txt файлик Json "шифр".


    теерь открываю новый проект, пишу:

    PHP:
    <?php
    header
    ("Content-Type: text/html; charset=UTF-8");
    $file file_get_contents('file.json');
    echo (
    strlen($file));
    $a json_decode($file,true);
    echo 
    $a;
    var_dump($a);
    ?>
    результат :
    231611
    NULL


    не могу понять, где мой расшифрованный массив?
    Почему json_decode не пашет?

    кодировка = utf-8 без BOM

    хелп плз

    UPD.
    Отладил кое как, вроде бы ошибка JSON_ERROR_SYNTAX
    Что не так в синтаксисе не пойму?
    у меня был массив 3 уровневой Array['1']['2']['3']
    После этого заюзал
    json_encode($array);
     
    #1 InfectedM, 16 Nov 2015
    Last edited: 16 Nov 2015
  2. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,414
    Likes Received:
    911
    Reputations:
    863
    Начал тестить, тоже не работало, но когда задал кодировку обоим файлам, пхп скрипту и самому файлу file.json "ОБОИМ", утф без бум, все заработало!
     
    _________________________
    InfectedM likes this.
  3. InfectedM

    InfectedM Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    встретились 1-2 слова с кавычками и все рушилось, думал что функция автоматом экранирует там все, но она оказалась не такая умная)

    Решил вопрос через
    addslashes, топ можно удалять)
     
    #3 InfectedM, 16 Nov 2015
    Last edited: 16 Nov 2015
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Я просто оставлю это здесь
    PHP:
    if (! function_exists('json_encode'))
    {
        
    /**
         * Convert a PHP scalar, array or hash to JS scalar/array/hash. This function is
         * an analog of json_encode(), but it can work with a non-UTF8 input and does not
         * analyze the passed data. Output format must be fully JSON compatible.
         *
         * A port of JsHttpRequest (http://en.dklab.ru)
         * (C) Dmitry Koterov, http://en.dklab.ru
         *
         * @param mixed $a   Any structure to convert to JS.
         * @return string    JavaScript equivalent structure.
         */
        
    function json_encode($a false)
        {
            if (
    is_null($a)) return 'null';
            if (
    $a === false) return 'false';
            if (
    $a === true) return 'true';
            if (
    is_scalar($a)) {
                if (
    is_float($a)) {
                    
    // Always use "." for floats.
                    
    $a str_replace(",""."strval($a));
                }

                static 
    $jsonReplaces = array(
                    array(
    "\\""/""\n""\t""\r""\b""\f"'"'),
                    array(
    '\\\\''\\/''\\n''\\t''\\r''\\b''\\f''\"')
                );
                return 
    '"'.str_replace($jsonReplaces[0], $jsonReplaces[1], $a).'"';
            }
            
    $isList true;
            for (
    $i 0reset($a); $i count($a); $i++, next($a)) {
                if (
    key($a) !== $i) {
                    
    $isList false;
                    break;
                }
            }
            
    $result = array();
            if (
    $isList) {
                foreach (
    $a as $v) {
                    
    $result[] = json_encode($v);
                }
                return 
    '[ '.join(', '$result).' ]';
            } else {
                foreach (
    $a as $k => $v) {
                    
    $result[] = json_encode($k).': '.json_encode($v);
                }
                return 
    '{ '.join(', '$result).' }';
            }
        }
    }
     
    _________________________
  5. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Лучше бы заюзал опции JSON_HEX_APOS и JSON_HEX_QUOT в функции json_encode.
     
    InfectedM likes this.