Estoy teniendo dificultad con la sintaxis y la estructura de los objetos JSON/matrices.

{ 
  "accounting" : [   
                     { "firstName" : "John",  
                       "lastName"  : "Doe",
                       "age"       : 23 },

                     { "firstName" : "Mary",  
                       "lastName"  : "Smith",
                        "age"      : 32 }
                 ],                            
  "sales"      : [ 
                     { "firstName" : "Sally", 
                       "lastName"  : "Green",
                        "age"      : 27 },

                     { "firstName" : "Jim",   
                       "lastName"  : "Galley",
                       "age"       : 41 }
                 ] 
} 

Quiero hacer una estructura anidada de los objetos y de las matrices que la casa de la siguiente información:

{
"problems": [{
    "Diabetes":[{
        "medications":[{
            "medicationsClasses":[{
                "className":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }],
                "className2":[{
                    "associatedDrug":[{
                        "name":"asprin",
                        "dose":"",
                        "strength":"500 mg"
                    }],
                    "associatedDrug#2":[{
                        "name":"somethingElse",
                        "dose":"",
                        "strength":"500 mg"
                    }]
                }]
            }]
        }],
        "labs":[{
            "missing_field": "missing_value"
        }]
    }],
    "Asthma":[{}]
}]}

Pero no tengo idea de cuál es la manera correcta de hacerlo debe ser. Debo estar haciendo objetos de JavaScript? ¿JSON sentido para este proyecto?

¿Cuál es la sintaxis correcta para definir algo como esto?

Aquí está mi código hasta el momento:

$(document).ready(function() {
    $.getJSON('js/orders.json', function(json) {
      $.each(json.problems, function(index, order) {
        $('.loadMeds').append('<p>' + order.name + '</p>')
      });
    });
});
  • Se me acaba de hacer una prueba local llamando al archivo JSON con getJSON() de jQuery. Esto es sólo para pruebas en un entorno de producción. Servidor está ejecutando Apache PHP. (no muy bien informado con el servidor de cosas, ya sea…)
  • Se ha actualizado el ejemplo
  • No estoy seguro de a dónde se quiere llegar con esta pregunta. Usted debe estructurar los datos en una forma que puede procesar fácilmente y que depende de lo que están haciendo con los datos… ¿tiene usted cualquier pregunta técnica? De lo contrario, no veo cómo esta pregunta es responder.
  • Básicamente quiero una manera fácil de almacenar cadenas de datos de medicamentos, manteniendo una estricta y limpia de organización strucure. Luego quiero sacar este archivo JSON y salida de los valores en una tabla.
  • entonces tu problema no es con json, xml, etc, que sólo pretende ser utilizado como temporal de las estructuras de datos, usted debe aprender SQL y el uso postgeSQL 🙂
  • Gracias por la info! Voy a mirar en SQL!
  • Felix Kling Sí mi TÉCNICA de la pregunta era si o no mi sintaxis y la estructura estaba en lo correcto…
  • Así, si la sintaxis es correcta, puede encontrarse con herramientas tales como jsonlint.org. En cuanto a la estructura, que es más conceptual que técnica y tendería a ver esto como muy localizada o fuera de tema para este sitio.
  • bueno, como he dicho, soy nuevo en todo esto. Así que tal vez tengo que averiguar la estructura por mi cuenta, pero gracias por la web! Voy a ver! El más recursos que tengo el mejor 🙂
  • La lectura de ese objeto, de hecho me gustaría tener un aspirin. ah, y recuerde que «el más alto nivel de sofisticación es la simplicidad».

InformationsquelleAutor Alex | 2012-05-10

5 Comentarios

  1. 22

    El primer código es un ejemplo de código Javascript, que es similar, sin embargo no JSON. JSON no habría 1) comentarios y 2) la var palabra clave

    Usted no tiene los comentarios en el JSON, pero debe eliminar el var y empezar así:

    orders: {

    La [{}] notación significa «objeto en una matriz» y no es lo que usted necesita en todas partes. No es un error, pero es demasiado complicado para algunos propósitos. AssociatedDrug debería funcionar bien como un objeto:

    "associatedDrug": {
                    "name":"asprin",
                    "dose":"",
                    "strength":"500 mg"
              }

    También, el objeto vacío laboratorios debe ser llenado con algo.

    Aparte de eso, su código está bien. Usted puede pegarlo en javascript, o el uso de la JSON.parse() método, o cualquier otro método de análisis (por favor no usar eval)

    Actualización 2 respondió:

    obj.problems[0].Diabetes[0].medications[0].medicationsClasses[0].className[0].associatedDrug[0].name

    devuelve ‘aspirina’. Sin embargo, es más adecuado para foreaches en todas partes

    • Gracias por la punta en el eval()! Me aseguraré de evitar esto 🙂
    • Una vez que usted descubre que JSON.parse() no funciona en IE7, hay un método de jQuery para hacerlo en todos los navegadores. $.parseJSON()
    • que es lo que acabé haciendo. Mira mi solución que he publicado. He utilizado anidada $.cada una de las declaraciones de agarrar a los datos que yo estaba buscando. Gracias por la ayuda!
  2. 15

    He conseguido resolver mi problema. Aquí está mi código:

    El complejo objeto JSON:

       {
    "medications":[{
    "aceInhibitors":[{
    "name":"lisinopril",
    "strength":"10 mg Tab",
    "dose":"1 tab",
    "route":"PO",
    "sig":"daily",
    "pillCount":"#90",
    "refills":"Refill 3"
    }],
    "antianginal":[{
    "name":"nitroglycerin",
    "strength":"0.4 mg Sublingual Tab",
    "dose":"1 tab",
    "route":"SL",
    "sig":"q15min PRN",
    "pillCount":"#30",
    "refills":"Refill 1"
    }],
    "anticoagulants":[{
    "name":"warfarin sodium",
    "strength":"3 mg Tab",
    "dose":"1 tab",
    "route":"PO",
    "sig":"daily",
    "pillCount":"#90",
    "refills":"Refill 3"
    }],
    "betaBlocker":[{
    "name":"metoprolol tartrate",
    "strength":"25 mg Tab",
    "dose":"1 tab",
    "route":"PO",
    "sig":"daily",
    "pillCount":"#90",
    "refills":"Refill 3"
    }],
    "diuretic":[{
    "name":"furosemide",
    "strength":"40 mg Tab",
    "dose":"1 tab",
    "route":"PO",
    "sig":"daily",
    "pillCount":"#90",
    "refills":"Refill 3"
    }],
    "mineral":[{
    "name":"potassium chloride ER",
    "strength":"10 mEq Tab",
    "dose":"1 tab",
    "route":"PO",
    "sig":"daily",
    "pillCount":"#90",
    "refills":"Refill 3"
    }]
    }
    ],
    "labs":[{
    "name":"Arterial Blood Gas",
    "time":"Today",
    "location":"Main Hospital Lab"      
    },
    {
    "name":"BMP",
    "time":"Today",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"BNP",
    "time":"3 Weeks",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"BUN",
    "time":"1 Year",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"Cardiac Enzymes",
    "time":"Today",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"CBC",
    "time":"1 Year",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"Creatinine",
    "time":"1 Year",
    "location":"Main Hospital Lab"  
    },
    {
    "name":"Electrolyte Panel",
    "time":"1 Year",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"Glucose",
    "time":"1 Year",
    "location":"Main Hospital Lab"  
    },
    {
    "name":"PT/INR",
    "time":"3 Weeks",
    "location":"Primary Care Clinic"    
    },
    {
    "name":"PTT",
    "time":"3 Weeks",
    "location":"Coumadin Clinic"    
    },
    {
    "name":"TSH",
    "time":"1 Year",
    "location":"Primary Care Clinic"    
    }
    ],
    "imaging":[{
    "name":"Chest X-Ray",
    "time":"Today",
    "location":"Main Hospital Radiology"    
    },
    {
    "name":"Chest X-Ray",
    "time":"Today",
    "location":"Main Hospital Radiology"    
    },
    {
    "name":"Chest X-Ray",
    "time":"Today",
    "location":"Main Hospital Radiology"    
    }
    ]
    }

    El código jQuery para coger los datos y mostrar en mi página web:

    $(document).ready(function() {
    var items = [];
    $.getJSON('labOrders.json', function(json) {
    $.each(json.medications, function(index, orders) {
    $.each(this, function() {
    $.each(this, function() {
    items.push('<div class="row">'+this.name+"\t"+this.strength+"\t"+this.dose+"\t"+this.route+"\t"+this.sig+"\t"+this.pillCount+"\t"+this.refills+'</div>'+"\n");
    });
    });
    });
    $('<div>', {
    "class":'loaded',
    html:items.join('')
    }).appendTo("body");
    });

    });

    • Un poco tarde para mi comentario tal vez; pero se me ocurre que usted todavía está utilizando matrices de mucho, incluso cuando parece que no solamente puede ser un objeto. Por ejemplo, su nivel superior medications propiedad es una matriz de un solo objeto. A menos que usted realmente necesita para dar cuenta de múltiples colecciones de la medicina de los tipos de aquí, yo dejaría las matrices por completo. A continuación, puede simplemente usar var x = medications.aceInhibitors en lugar de medications[0].aceInhibitors. (Para mí, el segundo dice «voy a tomar el aceInhibitors propiedad de la antes los medicamentos objeto» – ¿qué hace la primera significa aquí?)
    • No creo que usted necesita para poner las propiedades de la med tipos en una matriz. En realidad, no es un método recomendado para la construcción de JSON para el rendimiento. Vea la propiedad de pedidos google.github.io/styleguide/…
  3. 4

    Asegúrese de que usted siga el lenguaje de definición de JSON. En el segundo ejemplo, la sección:

    "labs":[{
    ""
    }]

    No es válido ya que debe ser un objeto compuesto de cero o más pares de clave-valor "a" : "b", donde "b" puede ser de cualquier válido valor. Algunos analizadores de forma automática puede interpretar { "" } a ser { "" : null }, pero esto no es un claro caso.

    También, se utiliza un anidada matriz de objetos [{}] bastante. Me gustaría hacer esto únicamente si:

    1. No es bueno «identificador» string para cada objeto de la matriz.
    2. Hay algo de razón clara para tener una matriz a través de una clave-valor para esa entrada.
    • Los laboratorios son un marcador de posición….Esto es sólo un burdo concepto. Sé que se necesita un valor.
  4. 1

    Primer lugar, la elección de una estructura de datos(xml,json,yaml) generalmente incluye sólo una legibilidad/tamaño del problema. Por ejemplo

    Json es muy compacto, pero ningún ser humano puede leer fácilmente, muy duro hacer debug,

    Xml es muy grande, pero todo el mundo puede leer/depurar,

    Yaml es entre Xml y json.

    Pero si quieres trabajar con Javascript fuertemente y/o su software hace un montón de transferencia de datos entre el navegador del servidor, debe utilizar Json, porque es javascript puro y muy compacto. Pero no trate de escribir una cadena de texto, el uso de las bibliotecas para generar el código que necesita de un objeto.

    Espero que esto ayude.

    • No sé lo que esto significa «uso de bibliotecas para generar el código que necesita de un objeto». ¿Podría dar un ejemplo?
    • Por ejemplo, crear el array o un objeto en php, a continuación, utilizar json_encode() para convertir a json válido.
    • crear un objeto en php, a continuación, enviar o incrustarlo en tu página con json_encode() método. El proceso se llama serializar un objeto, lo siento, se me olvidó decir que en cuestión; itnewb.com/tutorial/Introduction-to-JSON-and-PHP/page3 este es un ejemplo
    • Creo que es muy subjetivo… me parece JSON mucho más fáciles de leer que XML.
    • Kling me enteré de que sólo ahora, porque 2 personas depurado de Alex de código ya 🙂 yo no uso de xml en cualquier lugar, pero aún creo que es más fácil que siga.
    • Estoy de acuerdo. Creo que JSON es muy fácil de leer. XML está fuera de control. jeje

  5. 0

    Usted puede intentar usar esta función para encontrar cualquier objeto en anidados matriz anidada de las matrices de los reyes.

    Ejemplo

    function findTByKeyValue (element, target){
    var found = true;
    for(var key in target) { 
    if (!element.hasOwnProperty(key) || element[key] !== target[key])   { 
    found = false;
    break;
    }
    }
    if(found) {
    return element;
    }
    if(typeof(element) !== "object") { 
    return false;
    }
    for(var index in element) { 
    var result = findTByKeyValue(element[index],target);
    if(result) { 
    return result; 
    }
    } 
    };
    findTByKeyValue(problems,{"name":"somethingElse","strength":"500 mg"}) =====> result equal to object associatedDrug#2

Dejar respuesta

Please enter your comment!
Please enter your name here