Estou usando o Sencha Touch (ExtJS) para obter uma mensagem JSON do servidor. A mensagem que recebo é esta:
{
"success": true,
"counters": [
{
"counter_name": "dsd",
"counter_type": "sds",
"counter_unit": "sds"
},
{
"counter_name": "gdg",
"counter_type": "dfd",
"counter_unit": "ds"
},
{
"counter_name": "sdsData",
"counter_type": "sds",
"counter_unit": " dd "
},
{
"counter_name": "Stoc final",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "Consum GPL",
"counter_type": "number ",
"counter_unit": "litri "
},
{
"counter_name": "sdg",
"counter_type": "dfg",
"counter_unit": "gfgd"
},
{
"counter_name": "dfgd",
"counter_type": "fgf",
"counter_unit": "liggtggggri "
},
{
"counter_name": "fgd",
"counter_type": "dfg",
"counter_unit": "kwfgf "
},
{
"counter_name": "dfg",
"counter_type": "dfg",
"counter_unit": "dg"
},
{
"counter_name": "gd",
"counter_type": "dfg",
"counter_unit": "dfg"
}
]
}
Meu problema é que não consigo analisar esse objeto JSON para poder usar cada um dos objetos de contador.
Estou tentando conseguir isso assim:
var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
console.log(counter.counter_name);
}
O que estou fazendo de errado ? Obrigado!
javascript
json
extjs
maefisto
fonte
fonte
Respostas:
Javascript tem uma análise JSON embutida para strings, que eu acho que é o que você tem:
usar isso com seu exemplo seria:
Aqui está um exemplo prático
EDIT : Há um erro no uso do loop for (perdi isso na minha primeira leitura, crédito de @Evert pela mancha). usar um loop for-in definirá var como o nome da propriedade do loop atual, não os dados reais. Veja meu loop atualizado acima para o uso correto
IMPORTANTE : o
JSON.parse
método não funcionará em navegadores antigos - portanto, se você planeja disponibilizar seu site por meio de algum tipo de conexão de internet que flexiona o tempo, isso pode ser um problema! Se você realmente estiver interessado, aqui está um gráfico de suporte (que marca todas as minhas caixas).fonte
Esta é a minha resposta,
fonte
Em um for-in-loop, a variável running contém o nome da propriedade, não o valor da propriedade.
Mas, como contadores é um Array, você deve usar um loop for normal:
fonte
A "maneira Sencha" para interagir com os dados do servidor é configurar um
Ext.data.Store
proxy por umExt.data.proxy.Proxy
(neste casoExt.data.proxy.Ajax
) fornecido com umExt.data.reader.Json
(para dados codificados em JSON, existem outros leitores disponíveis também). Para gravar dados de volta no servidor, existemExt.data.writer.Writer
vários tipos de programas.Aqui está um exemplo de configuração como esta:
data1.json
neste exemplo (também disponível neste fiddle ) contém seus dados literalmente.idProperty: 'counter_name'
é provavelmente opcional neste caso, mas geralmente aponta para o atributo de chave primária.rootProperty: 'counters'
especifica qual propriedade contém uma matriz de itens de dados.Com a configuração de uma loja, você pode reler os dados do servidor ligando para
store.load()
. Você também pode conectar a loja a qualquer componente de IU apropriado do Sencha Touch, como grades, listas ou formulários.fonte
Algo mais direto para mim ..
fonte
Isso funciona como um encanto!
Então, editei o código de acordo com minha exigência. E aqui estão as alterações: Isso salvará o número de id da resposta na variável de ambiente.
fonte
A resposta com o voto mais alto contém um erro. quando usei, descobri na linha 3:
Eu mudei para:
e funcionou para mim. Há uma diferença para as outras respostas na linha 3:
fonte
Só para alertar ...
foi descontinuado .
Postman Learning Center agora sugere
fonte
Você deve usar um armazenamento de dados e proxy em ExtJs. Existem muitos exemplos disso, e o leitor JSON analisa automaticamente a mensagem JSON no modelo que você especificou.
Não há necessidade de usar Javascript básico ao usar ExtJs, tudo é diferente, você deve usar as formas de ExtJs para fazer tudo certo. Leia a documentação com atenção, é bom.
A propósito, esses exemplos também valem para o Sencha Touch (especialmente v2), que é baseado nas mesmas funções principais dos ExtJs.
fonte
Não tenho certeza se meus dados correspondem exatamente, mas eu tinha uma matriz de matrizes de objetos JSON, que foram exportados do jQuery FormBuilder ao usar páginas.
Espero que minha resposta possa ajudar qualquer pessoa que tropeçar nesta pergunta procurando uma resposta para um problema semelhante ao que eu tive.
Os dados eram mais ou menos assim:
O que fiz para analisar isso foi simplesmente fazer o seguinte:
fonte