function jsonPaths1(obj, str, arr) {
if (!str)
str = "";
if (!arr)
arr = [];
if (typeof obj == "object" && obj instanceof Array ){
arr.push(str+"=[]");
}else if(typeof obj == "object" && obj instanceof Object){
arr.push(str+"={}");
}else{
arr.push(str+"="+obj+"");
return arr; // Такое происходит, если в функцию передаётся только примитивное значение, а не объект. Например, jsonPaths1(5, "obj")
}
function temp(){
var propPath = null;
if (isNaN(Number(o)) == false) {
propPath = str + "[" + o + "]"; // Если индекс является числом, то не брать его в кавычки
} else {
propPath = str + "['" + o + "']"; // Если индекс - "слово", то заключить его в кавычки.
}
var oobj = obj[o];
// Если свойство - функция, то ничего не делать. Функции не нужны.
if (typeof oobj == "function") {
return;
}
// Если свойство является массивом, то нужно войти в массив и пройтись по его свойствам
if (typeof obj == "object" && (obj instanceof Array || obj instanceof Object)) {
// Если элемент массива является массивом или json-ом, то нужно исследовать его:
if (typeof oobj == "object" && oobj instanceof Array || typeof oobj == "object" && oobj instanceof Object) {
jsonPaths1(oobj, propPath, arr);
return;
}
switch( typeof oobj ){
case "string":
arr.push(propPath+"=\""+oobj.replace(/\"/gi, "\\\"").replace(/\n/gi,"\\n")+"\""); // только строку обрамить кавычками
break;
case "boolean":
case "number":
default:
arr.push(propPath+"="+oobj+""); // остальное печатать без кавычек, в том числе и булевы значения.
break;
}
/*
if( isNaN(oobj)==true || typeof oobj=="string" && oobj.length==0 ){
arr.push(propPath+"=\""+oobj.replace(/\"/gi, "\\\"")+"\""); // только строку обрамить кавычками
}else{
arr.push(propPath+"=\""+oobj+"\""); // остальное печатать без кавычек, в том числе и булевы значения.
}
*/
return;
}
}
var arr_keys = [];
if (typeof obj == "object" && obj instanceof Array ){
for ( var i=0; i<=obj.length-1; i++ ) {
arr_keys.push(i);
}
}else{
for ( var o in obj ) {
arr_keys.push(o);
}
arr_keys.sort();
}
for ( var i=0; i<=arr_keys.length-1; i++ ) {
var o = arr_keys[i];
temp();
}
return arr;
}