Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2016, 10:43   #1
Anurhat
Пользователь
 
Регистрация: 14.02.2015
Сообщений: 21
По умолчанию Перевод из массива в JSON

Изначально имеется такой Json файл

PHP код:
{"widget" : {
    
"debug""on",
    
"window": {
        
"title""Sample Konfabulator Widget",
        
"name""main_window",
        
"width"500,
        
"height"500
    
},
    
"image": { 
        
"src""Images/Sun.png",
        
"name""sun1",
        
"hOffset"250,
        
"vOffset"250,
        
"alignment""center"
    
},
    
"text": {
        
"data""Click Here",
        
"size"36,
        
"style""bold",
        
"name""text1",
        
"hOffset"250,
        
"vOffset"100,
        
"alignment""center",
        
"onMouseUp""sun1.opacity = (sun1.opacity / 100) * 90;"
    
}
}} 
Перевожу соответственной функцией его в массив
PHP код:
    $file file_get_contents($path);
    
$res json_decode($filetrue); 
В результате получаю такой массив:

PHP код:
Array
(
    [
widget] => Array
        (
            [
debug] => on
            
[window] => Array
                (
                    [
title] => Sample Konfabulator Widget
                    
[name] => main_window
                    
[width] => 500
                    
[height] => 500
                
)

            [
image] => Array
                (
                    [
src] => Images/Sun.png
                    
[name] => sun1
                    
[hOffset] => 250
                    
[vOffset] => 250
                    
[alignment] => center
                
)

            [
text] => Array
                (
                    [
data] => Click Here
                    
[size] => 36
                    
[style] => bold
                    
[name] => text1
                    
[hOffset] => 250
                    
[vOffset] => 100
                    
[alignment] => center
                    
[onMouseUp] => sun1.opacity = (sun1.opacity 100) * 90;
                )

        )


При переводе обратно из массива в JSON получаются не корректные данные Json

PHP код:
$text $_POST['text-area'];//Здесь находится массив
$res json_encode($text); 
Результат:
PHP код:
        
"\t\t\r\nArray\r\n(\r\n    [widget] => Array\r\n        (\r\n            [debug] => on\r\n            [window] => Array\r\n                (\r\n                    [title] => Sample Konfabulator Widget\r\n                    [name] => main_window\r\n                    [width] => 500\r\n                    [height] => 500\r\n                )\r\n\r\n            [image] => Array\r\n                (\r\n                    [src] => Images\/Sun.png\r\n                    [name] => sun1\r\n                    [hOffset] => 250\r\n                    [vOffset] => 250\r\n                    [alignment] => center\r\n                )\r\n\r\n            [text] => Array\r\n                (\r\n                    [data] => Click Here\r\n                    [size] => 36\r\n                    [style] => bold\r\n                    [name] => text1\r\n                    [hOffset] => 250\r\n                    [vOffset] => 100\r\n                    [alignment] => center\r\n                    [onMouseUp] => sun1.opacity = (sun1.opacity \/ 100) * 90;\r\n                )\r\n\r\n        )\r\n\r\n)\r\n\t" 
С пробельными символами еще понятно как разобраться, но почему данные по прежднему отображаются в виде массива. Подскажите пожалуйста что я делаю не так.
Anurhat вне форума Ответить с цитированием
Старый 06.02.2016, 15:05   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

a chto pokaget vot eto ?


PHP код:
echo " <pre>";

print_r($_POST['text-area']);


echo 
" </pre>"
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 06.02.2016, 16:21   #3
Anurhat
Пользователь
 
Регистрация: 14.02.2015
Сообщений: 21
По умолчанию

Выводится сам массив

PHP код:
Array
(
    [
widget] => Array
        (
            [
debug] => on
            
[window] => Array
                (
                    [
title] => Sample Konfabulator Widget
                    
[name] => main_window
                    
[width] => 500
                    
[height] => 500
                
)

            [
image] => Array
                (
                    [
src] => Images/Sun.png
                    
[name] => sun1
                    
[hOffset] => 250
                    
[vOffset] => 250
                    
[alignment] => center
                
)

            [
text] => Array
                (
                    [
data] => Click Here
                    
[size] => 36
                    
[style] => bold
                    
[name] => text1
                    
[hOffset] => 250
                    
[vOffset] => 100
                    
[alignment] => center
                    
[onMouseUp] => sun1.opacity = (sun1.opacity 100) * 90;
                )

        )


Anurhat вне форума Ответить с цитированием
Старый 06.02.2016, 16:37   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Хз, у меня так и не получилось воспроизвести такой баг с JSON, как я ни старался.
Делаю так:
PHP код:
$file '{"widget" : { 
    "debug": "on", 
    "window": { 
        "title": "Sample Konfabulator Widget", 
        "name": "main_window", 
        "width": 500, 
        "height": 500 
    }, 
    "image": {  
        "src": "Images/Sun.png", 
        "name": "sun1", 
        "hOffset": 250, 
        "vOffset": 250, 
        "alignment": "center" 
    }, 
    "text": { 
        "data": "Click Here", 
        "size": 36, 
        "style": "bold", 
        "name": "text1", 
        "hOffset": 250, 
        "vOffset": 100, 
        "alignment": "center", 
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" 
    } 
}} '
;
$res json_decode($file);
$res2 json_encode($res);
var_dump($res2); 
На выходе никаких пробелов, табуляции или переводов строк – нормальный JSON:
PHP код:
string '{"widget":{"debug":"on","window":{"title":"Sample Konfabulator Widget","name":"main_window","width":500,"height":500},"image":{"src":"Images\/Sun.png","name":"sun1","hOffset":250,"vOffset":250,"alignment":"center"},"text":{"data":"Click Here","size":36,"style":"bold","name":"text1","hOffset":250,"vOffset":100,"alignment":"center","onMouseUp":"sun1.opacity = (sun1.opacity \/ 100) * 90;"}}}' (length=391
Попробуй посмотреть результат json_last_error после кодирования массива в JSON.
Andkorol вне форума Ответить с цитированием
Старый 06.02.2016, 16:51   #5
Anurhat
Пользователь
 
Регистрация: 14.02.2015
Сообщений: 21
По умолчанию

Я понял в чем дилема, я совершил очень большую глупость. Когда я декодирую массив обратно в JSON - я брал данные из TEXTAREA формы, а тамошний тип данных - строковый..

В связи с этим вопрос, можно ли как нибудь перевести тип из получаемой строки в массив?
Anurhat вне форума Ответить с цитированием
Старый 06.02.2016, 16:58   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Так говорил же, что в $_POST['text-area'] массив?

В textarea что за данные вводятся?
JSON – это, по сути, и есть строка, только в ней присутствуют элементы форматирования и экранирования (иногда).
Если в textarea данные передаются в таком виде, как у меня в примере в переменной $file – так в этом случае ничего кодировать ничего не нужно – данные из textarea уже и есть JSON.
Andkorol вне форума Ответить с цитированием
Старый 06.02.2016, 19:54   #7
Anurhat
Пользователь
 
Регистрация: 14.02.2015
Сообщений: 21
По умолчанию

Спасибо, изначально запутался, вы очень помогли.
Anurhat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON Exception [org.apache.json] spectrum988 Помощь студентам 3 11.12.2015 09:25
С++ Перевод чисел с использованием массива marina12 Помощь студентам 2 15.02.2013 02:43
Парсинг массива в json C_R_E_S_C_H Общие вопросы Delphi 0 12.05.2012 23:39
Перевод двумерного массива в одномерный (С++) Тамарочка Помощь студентам 6 30.11.2011 13:28
Перевод массива битов в байт Барбарис Общие вопросы .NET 4 25.02.2010 16:15