2015-12-02 2 views
5

Что такое простой способ получить все пути в данном объекте Json; Для примера:Чтобы распечатать все пути в объекте json

{ 
    app:{ 
     profiles:'default' 
    }, 
    application:{ 
     name:'Master Service', 
     id:'server-master' 
    }, 
    server:{ 
     protocol:'http', 
     host:'localhost', 
     port:8098, 
     context:null 
    } 
} 

я должен иметь возможность произвести следующий объект

app.profiles=default 
application.name=Master Service 
application.id=server-master 

я смог достичь того же с помощью рекурсивной функции. Я хочу знать, есть ли встроенная функция от json, которая делает это.

+0

могли бы вы поделиться рекурсивную функцию – shintaroid

ответ

4

Вы можете реализовать свой собственный конвертер перебирая объектов рекурсивно.

Что-то вроде этого:

var YsakON = { // YsakObjectNotation 
    stringify: function(o, prefix) {   
    prefix = prefix || ''; 

    switch (typeof o) 
    { 
     case 'object': 
     if (Array.isArray(o)) 
      return prefix + '=' + JSON.stringify(o) + '\n'; 

     var output = ""; 
     for (var k in o) 
     { 
      if (o.hasOwnProperty(k)) 
      output += this.stringify(o[k], prefix + '.' + k); 
     } 
     return output; 
     case 'function': 
     return ""; 
     default: 
     return prefix + '=' + o + '\n'; 
    } 
    } 
}; 

// Usage: 
YaskON.stringify(obj); 

Это не лучшая реализация конвертер, только быстро написанный пример, но это должно помочь вам понять основной принцип.

Адрес working JSFiddle demo.

+0

Спасибо, я проверял это есть встроенная функция fron json, чтобы распечатать все доступные пути, поскольку json, наконец, представляет собой древовидную структуру. – Ysak

1

Я думаю, что нет встроенной функции, которая делает это. Это можно сделать с помощью простой петли, как показано ниже в моей скрипке. Но он не заботится о рекурсивности. Вот другие должности, которые я нашел о том же: Post1 и Post2 и Post3

var myjson = { 
    app:{ 
     profiles:'default' 
    }, 
    application:{ 
     name:'Master Service', 
     id:'server-master' 
    }, 
    server:{ 
     protocol:'http', 
     host:'localhost', 
     port:8098, 
     context:null 
    } 
}; 

for(key in myjson) { 
    for(k in myjson[key]) { 
    console.log(key + '.' + k + ' = '+ myjson[key][k]); 
    } 
} 

Fiddle

+1

Это обыкновение решать цели, потому что его только с учетом только один уровень, он должен быть рекурсивными как дано Yeldar Курмангалиев – Ysak

+0

Да :) Ive обновил Ответ на этот вопрос – VishwaKumar