Copiei isso do site jquery. Estou tentando aprender como obter dados json para uma página da web. A data foi validada em: http://jsonlint.com/
Os resultados da execução do meu script são: [objeto objeto] [objeto objeto] [objeto objeto] [objeto objeto] [objeto objeto]
Preciso analisar os dados ou getJSON faz isso.
Este é o código que estou usando:
<!doctype html>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<script type="text/javascript">
$.getJSON("data.json", function(data) {
var items = [];
$.each(data, function(key, val) {
items.push("<li id="" + key + "">" + val + "</li>");
});
$("<ul/>", {
"class": "my-new-list",
html: items.join("")
}).appendTo("body");
});
</script>
</head>
<body>
</body>
</html>
Dicas de solução de problemas seriam ótimas e, claro, uma resposta também seria ótima!
data.json
[
{
"bytes": "476.577044"
},
{
"bytes": "136113.5289"
},
{
"bytes": "118870.8151"
},
{
"bytes": "55001.67852"
}
]
resposta console.log (dados):
[Object { bytes="476.577044"}, Object { bytes="136113.5289"}, Object { bytes="118870.8151"}, Object { bytes="55001.67852"}]
JSON.html (line 14)
[Object { bytes="476.577044"}, Object { bytes="136113.5289"}, Object { bytes="118870.8151"}, Object { bytes="55001.67852"}]
JSON.html (line 14)
[Object { bytes="476.577044"}, Object { bytes="136113.5289"}, Object { bytes="118870.8151"}, Object { bytes="55001.67852"}]
JSON.html (line 14)
[Object { bytes="476.577044"}, Object { bytes="136113.5289"}, Object { bytes="118870.8151"}, Object { bytes="55001.67852"}]
Respostas:
1 para resposta № 1Bem perto, tente isto: (contanto que o arquivo "data.json" seja um arquivo válido)
$(document).ready(function(){
$.getJSON("data.json", function(data) {
var items = [];
$.each(data, function(key, val) {
items.push("<li id="" + key + "">" + val + "</li>");
});
$("<ul/>").addClass("my-new-list").html(items.join("")).appendTo("body");
});
});
EDITAR
A forma como seu json está configurado, $.each
irá iterar a matriz externa que contém os objetos. O que torna o key
um índice numérico, e o val
o objeto real. Com isso dito, mudando o $.each
parte para ficar assim:
$.each(data, function(key, val) {
items.push("<li id="" + key + "">" + val.bytes + "</li>");
});
deve fazer o truque
(nota: id "s não devem começar com um número)
2 para resposta № 2
Eu tive o mesmo problema. Resolvi colocando o objeto JSONP em console.log()
e, em seguida, olhando para a árvore no Chromeferramentas de desenvolvimento. Lá eu percebi que "objeto" era apenas o nome que o analisador deu a todos os diferentes objetos dentro do arquivo JSON, então você deve levar isso em consideração ao buscar os valores.
$(document).ready(function(){
$.getJSON("data.json", function(data) {
var items = [];
$.each(data, function(key, val) {
items.push("<li >" + data.object.bytes + "</li>");
});
$("<ul/>").addClass("my-new-list").html(items.join("")).appendTo("body");
});
});
Os dados que você deseja estão em um par chave: valor dentro um objeto chamado "objeto que está dentro de uma matriz (isto é o que está sendo percorrido quando você faz $.each()
)
Então você tem que dizer ao JQuery para olhar dentro do objeto e então diga qual chave procurar.
Não coloquei nenhum ID porque não tenho certeza do que você queria que eles fossem. Você apenas queria que cada elemento tivesse "bytes" como o ID? Os ID "s devem ser exclusivos (pelo menos de acordo com este http://css-tricks.com/the-difference-between-id-and-class/)
Se o que você quer é um class
para que você possa fazer CSS / JQuery em todo o lote, então você pode tentar algo como "<li class ="" + object.key + "">"