Это работало для какого-то старого gcc. Извините, что я забыл, какая версия была:
#define _cat(x, y) x##y
#define _sassert(exp, ln)\
extern char _cat(SASSERT_, ln)[1]; \
extern char _cat(SASSERT_, ln)[exp ? 1 : 2]
#define sassert(exp) _sassert((exp), __LINE__)
//
sassert(1 == 2);
//
#148 declaration is incompatible with "char SASSERT_134[1]" (declared at line 134) main.c /test/source/controller line 134 C/C++ Problem
Как я уже говорил в своем комментарии, вы должны вызвать ctx.beginPath (); в конце цикла. Чтобы применить разные цвета, вы должны использовать несколько путей.
.
.
.
for(var i=0; i < json.length; i++){
ctx.lineTo(json[i].x, json[i].y);
ctx.strokeStyle = json[i].color;
ctx.stroke();
ctx.beginPath();
}