2014-02-18 2 views
0

Я новичок в JSON, и я использовал json_encode создать объект JSON, который выглядит как этотРазбор JSON не работает

[{ 
     "timestamp": "12\/16\/2013 0:00", 
     "curr_property": "7211", 
     "curr_property_cost": "123", 
     "day_property": "48", 
     "day_property_cost": "281", 
     "curr_solar_generating": "4958", 
     "curr_solar_export": "0", 
     "day_solar_generated": "33", 
     "day_solar_export": "0", 
     "curr_chan1": "1964", 
     "curr_chan2": "4958", 
     "curr_chan3": "289", 
     "day_chan1": "13", 
     "day_chan2": "33", 
     "day_chan3": "1" 
    }, { 
     "timestamp": "12\/16\/2013 0:00", 
     "curr_property": "7179", 
     "curr_property_cost": "123", 
     "day_property": "72", 
     "day_property_cost": "281", 
     "curr_solar_generating": "4926", 
     "curr_solar_export": "0", 
     "day_solar_generated": "49", 
     "day_solar_export": "0", 
     "curr_chan1": "1980", 
     "curr_chan2": "4926", 
     "curr_chan3": "273", 
     "day_chan1": "19", 
     "day_chan2": "49", 
     "day_chan3": "2" 
    }, { 
     "timestamp": "12\/16\/2013 0:00", 
     "curr_property": "9627", 
     "curr_property_cost": "165", 
     "day_property": "104", 
     "day_property_cost": "282", 
     "curr_solar_generating": "4749", 
     "curr_solar_export": "0", 
     "day_solar_generated": "65", 
     "day_solar_export": "0", 
     "curr_chan1": "1980", 
     "curr_chan2": "4749", 
     "curr_chan3": "2898", 
     "day_chan1": "26", 
     "day_chan2": "65", 
     "day_chan3": "12" 
    }, { 
     "timestamp": "12\/16\/2013 0:00", 
     "curr_property": "9610", 
     "curr_property_cost": "165", 
     "day_property": "136", 
     "day_property_cost": "282", 
     "curr_solar_generating": "4781", 
     "curr_solar_export": "0", 
     "day_solar_generated": "81", 
     "day_solar_export": "0", 
     "curr_chan1": "1980", 
     "curr_chan2": "4781", 
     "curr_chan3": "2849", 
     "day_chan1": "32", 
     "day_chan2": "81", 
     "day_chan3": "21" 
    }, { 
     "timestamp": "12\/16\/2013 0:01", 
     "curr_property": "9691", 
     "curr_property_cost": "166", 
     "day_property": "168", 
     "day_property_cost": "283", 
     "curr_solar_generating": "4797", 
     "curr_solar_export": "0", 
     "day_solar_generated": "97", 
     "day_solar_export": "0", 
     "curr_chan1": "1996", 
     "curr_chan2": "4797", 
     "curr_chan3": "2898", 
     "day_chan1": "39", 
     "day_chan2": "97", 
     "day_chan3": "31" 
    }, { 
     "timestamp": "12\/16\/2013 0:01", 
     "curr_property": "7034", 
     "curr_property_cost": "120", 
     "day_property": "191", 
     "day_property_cost": "283", 
     "curr_solar_generating": "4781", 
     "curr_solar_export": "0", 
     "day_solar_generated": "113", 
     "day_solar_export": "0", 
     "curr_chan1": "1980", 
     "curr_chan2": "4781", 
     "curr_chan3": "273", 
     "day_chan1": "46", 
     "day_chan2": "113", 
     "day_chan3": "32" 
}] 

Я попытался проанализировать данные, используя скрипт ниже

$(document).ready(
     function() { 
      var jsonData = JSON.parse("<?php echo $jsondata; ?>"); 
      console.log(jsonData.timestamp[0]);    

    }); 

Я не знаю, что я делаю неправильно здесь. Я знаю, что a имеет длину 0 по умолчанию в javascript, так как я могу получить значение? КСТАТИ var_dump на $ jsondata выдает данные

+0

Я думаю, что у вас неправильные кавычки.Замените одинарные кавычки - 'var jsonData = JSON.parse ('');' Поскольку строка JSON содержит двойные кавычки внутри. – techfoobar

+0

теперь я получаю Uncaught TypeError: Не могу прочитать свойство «0» неопределенного использования «» - это правильный путь от того, что я прочитал до сих пор. – Bazinga777

+0

подтвердите свои данные json в http://json.parser.online.fr/ –

ответ

1

Вы вызываете console.log(jsonData.timestamp[0]);, что в основном означает, внутри jsonData найти свойство timestamp, которое является массивом и получить первый индекс.

Но jsonData - это массив, а не метка времени. Вероятно, вы должны пойти с чем-то вроде console.log(jsonData[0].timestamp);

+0

Спасибо, что сработал отлично – Bazinga777

+0

Я не знал эту часть, поэтому спасибо большое, выберет ее как правильный ответ через 2 минуты – Bazinga777

+1

@ Bazinga777: Интересно, как это работает для вас, учитывая, что 'var jsonData = JSON.parse (""); 'должен вызывать недопустимый JavaScript. –

2

Попробуйте использовать одиночные кавычки здесь:

var jsonData = JSON.parse("<?php echo $jsondata; ?>"); 

Заменить, что с:

var jsonData = JSON.parse('<?php echo $jsondata; ?>'); 

Поскольку $jsondata содержит двойные кавычки ("), строку пройденный до JSON.parse(), будет нарушен, что приведет к недействительному JavaScript.

Однако, как ответил Квентин, не нужно JSON.parse.
Like he answered, используйте: var data = <?php echo $jsondata; ?>;

Кроме того, вы обращаетесь к объекту неправильно:

jsonData.timestamp[0]; 

Должно быть:

jsonData[0].timestamp; 

ваш JSON является массив объектов временной метки, так что используйте массив индекс [0], первый.

+0

Этого недостаточно, JSON также включает в себя новые строки. – Quentin

+0

@Quentin: OP используется 'json_encode', который должен возвращать действительную строку JSON без новых строк. Я считаю, что это просто ошибка форматирования от вопроса. – Cerbrus

+0

Возможно, были использованы красивые варианты печати? – Quentin

6

Данные вашего JSON включают в себя " символов. Вы пытаетесь ввести его в строковый литерал JavaScript, который делится на ", но вы не избегаете символов " данных.

Ваш JSON также включает в себя новые строки, буквальные новые строки не допускаются в строках JavaScript, поэтому вам необходимо заменить их escape-последовательностями (\n).

Это говорит о том, что JSON является подмножеством синтаксиса буквального текста JavaScript, поэтому вам не нужно прилагать усилий для преобразования текста JSON в строковый литерал JavaScript и затем его разбора, вы можете просто использовать JSON как JavaScript :

var data = <?php echo $jsondata; ?>; 

у вас есть еще одна проблема. Ваши данные JSON представляют собой массив объектов, а не объект, который имеет массивы как значения свойств. Вам необходимо получить доступ к массиву до: data[0].timestamp.

+0

Хорошо, что это такое, когда люди возвращают этот ответ, а не мои? Я был быстрее в одиночных кавычках и ответах доступа к массиву, но этот парень получает голоса из-за 288k rep? – Cerbrus

+2

@Cerbrus: Нет, просто потому, что это лучший ответ. Зачем использовать 'JSON.parse', если вам не нужно? Ваши решения даже не надежны: что произойдет, если данные JSON содержат '' '? –

+0

@Cerbrus Если вы делаете это для повторений, вы делаете это по неправильным причинам. Я здесь, на S/O, как 4 года. Это веселое место, чтобы помочь людям. Нет конкуренции. – Shouvik

Смежные вопросы