2015-06-01 2 views
0

Я использую файл JSON для хранения массива атрибутов прямоугольника. Затем, в отдельном файле javascript, я разбираю JSON и рисую прямоугольники на холсте. По какой-то причине, Eclipse любит этот формат JSON и отладчик Chrome не принимает его:Eclipse JSON format

rectangles = '[{"x" : 0, "y" : 0, "width" : 20, "height" : 10, "color" : "red"}, {"x" : 25, "y" : 0, "width" : 20, "height" : 10, "color" : "blue"}, {"x" : 0, "y" : 15, "width" : 20, "height" : 10, "color" : "blue"}, {"x" : 25, "y" : 15, "width" : 20, "height" : 10, "color" : "red"}]'; 

, но когда я очистить его и попытаться отформатировать его, Eclipse больше не рисует прямоугольники с этим форматом:

rectangles='[ 
    { 
    "x": 0, 
    "y": 0, 
    "width": 20, 
    "height": 10, 
    "color": "red" 
    }, 
    { 
    "x": 25, 
    "y": 0, 
    "width": 20, 
    "height": 10, 
    "color": "blue" 
    }, 
    { 
    "x": 0, 
    "y": 15, 
    "width": 20, 
    "height": 10, 
    "color": "blue" 
    }, 
    { 
    "x": 25, 
    "y": 15, 
    "width": 20, 
    "height": 10, 
    "color": "red" 
    } 
]'; 

Есть ли причина, по которой он рисует только прямоугольники с прежним форматом? Для справки, вот мой JavaScript:

function load(){ 
    var myData = JSON.parse(rectangles); 
    var can = document.getElementById('rectangleCanvas'); 
    var context = can.getContext('2d'); 

    for (i=0; i<myData.length; i++){ 
    context.fillStyle = myData[i].color; 
    context.fillRect(myData[i].x, myData[i].y, myData[i].width, myData[i].height); 
    } 
} 
+1

Основная отладка: 'console.log (myData)' в обоих форматах и ​​посмотреть, как они отличаются. –

+1

Даже если это недействительно JSON, почему Eclipse распознает первый формат? – Mike

+0

ну, может быть, 'rectangles' не является глобальным var, поэтому он не определен в тот момент, когда вы пытаетесь сделать это с ручной строкой, не вызывая ничего синтаксического анализа. поэтому ... проверьте 'console.log', чтобы увидеть, что ДЕЙСТВИТЕЛЬНО происходит, вместо того, чтобы предполагать, что это красивое отпечаток. –

ответ

0

Для конкретной проверки ошибок Tony's answer.

Кстати, из вашего фрагмента кажется странным, что вы объявляете его как String, а затем разбираете его позже.

Почему бы и нет?

rectangles = [ 
    { 
     "x": 0, 
     "y": 0, 
     "width": 20, 
     "height": 10, 
     "color": "red" 
    }, 
    { 
     "x": 25, 
     "y": 0, 
     "width": 20, 
     "height": 10, 
     "color": "blue" 
    }, 
    { 
     "x": 0, 
     "y": 15, 
     "width": 20, 
     "height": 10, 
     "color": "blue" 
    }, 
    { 
     "x": 25, 
     "y": 15, 
     "width": 20, 
     "height": 10, 
     "color": "red" 
    } 
]; 

function load(){ 

    var can = document.getElementById('rectangleCanvas'); 
    var context = can.getContext('2d'); 

    for (i=0; i<rectangles.length; i++){ 
     context.fillStyle = rectangles[i].color; 
     context.fillRect(rectangles[i].x, rectangles[i].y, rectangles[i].width, rectangles[i].height); 
    } 
} 
+0

Да, но OP использует JSON.parse, там строка json ** HAS ** является строкой. не может json.parse фактический массив/объект JS ... этот объект должен поступать из веб-вызова и входить как json. –

+0

Вы правы, проблема должна быть чем-то еще. Вероятно, переменная область. –

+0

Я согласен, что имеет смысл использовать JSON. Но неясно, как создается «прямоугольник». – Tony

2

Если вы хотите строку продлить на несколько строк, вы должны закончить строку и добавьте:

var myLongString = 'This' + 
    'is' + 
    'my long string.'; 

Я шлепнулся своим «Начищенной» rectangles в jsfiddle и вы можете увидеть консоль зарегистрируйте ошибку:

SyntaxError: unterminated string literal

+0

Так что я должен добавить после каждой строки в файле JSON? – Mike

+0

Файлы JSON не нуждаются в этом. Однако JavaScript делает. Поэтому, если вы просто извлекаете JSON из файла, вы должны быть в порядке. Кроме того, если вы получите его из файла, он уже должен быть JSON, а не строкой. – Tony