Android и Java JSON - PullRequest
       7

Android и Java JSON

0 голосов
/ 18 декабря 2010

Я новичок в использовании JSON и в настоящее время играюсь с графиком FLOT для отображения графика через WebView.

http://rapidandroid.org/wiki/Graphing

Однако, когда дело доходит до синтаксического анализа JSON, у меня возникают проблемы с представлением моих данных в виде эквивалента JavaScript. Я играл с этим часами, и у меня не получается, чтобы мой вывод в формате JSON выглядел следующим образом.

var datasets = {
    "Symptoms": {
        label: "Symptoms",
        data: [[1988, 10], [1989, 20], [1990, 10], [1991, 30], [1992, 40]]
    },        
    "Reactions": {
        label: "Reactions",
                    data: [[1988, 0], [1989, 0], [1990, 10], [1991, 30], [1992, 40]]

    },
    "Injections": {
        label: "Injections",
                    data: [[1988, 0], [1989, 0], [1990, 0], [1991, 30], [1992, 40]]

    },

};

Использование интерпретации Дэвидом графа флота http://w2davids.wordpress.com/android-charts-the-html5-and-javascript-way/

Заранее спасибо.

P.s. самое близкое, что я получил: Строковые данные = «[0,1], [5,3], [5,6], [7,2], [10,12]»; arr.put (данные);

поставь проблему так: {"data": ["[0,1], [5,3], [5,6], [7,2], [10,12]"]} // как мне избавиться от .. " .. также как я могу получить метку: в объекте JSON? также без кавычек


Решение

Передача объекта json из Android в javascript (например, веб-просмотр) Хорошо для тех, кто использует библиотеку flot javascript для отображения график в андроид

Java Activity

String json = "{"
             + "  \"Symptoms\":"
             + "{  \"label\": \"Symptoms\","
             + "  \"data\": [[1988, 10], [1989, 20], [1990, 10], [1991, 30], [1992, 40]] "
             + "},"
             + "  \"Infections\":"
             + "{  \"label\": \"Infections\","
             + "  \"data\": [[1988, 0], [1989, 0], [1990, 10], [1991, 35], [1992, 28]] "
             + "}"
             + "}";
        mAppView.loadUrl("javascript:GotGraph('"+json+"');");

Сторона Javascript (FLOT) (допускает несколько строк

function GotGraph(data) {

    var datasets = JSON.parse(data);

    // hard-code color indices to prevent them from shifting as
    // countries are turned on/off
    var i = 0;
    $.each(datasets, function(key, val) {
        val.color = i;
        ++i;
    });

    // insert checkboxes 
    var choiceContainer = $("#choices");
    $.each(datasets, function(key, val) {
        choiceContainer.append('<br/><input type="checkbox" name="' + key +
                               '" checked="checked" id="id' + key + '">' +
                               '<label for="id' + key + '">'
                                + val.label + '</label>');
    });
    choiceContainer.find("input").click(plotAccordingToChoices);


    // 
    function plotAccordingToChoices() {
        var data = [];

        choiceContainer.find("input:checked").each(function () {
            var key = $(this).attr("name");
            if (key && datasets[key])
                data.push(datasets[key]);
        });

        if (data.length > 0)
            $.plot($("#placeholder"), data, {
                yaxis: { min: 0 },
                xaxis: { tickDecimals: 0 }
            });
    }

    plotAccordingToChoices();

}

Благодаря

http://rapidandroid.org/wiki/Graphing

http://w2davids.wordpress.com/android-charts-the-html5-and-javascript-way/

и @ achie

Ответы [ 2 ]

3 голосов
/ 18 декабря 2010

Проблема в том, что вы показали, что это не допустимый объект JSON.

Вы пытались проверить объект JSON, который вы пытаетесь использовать? Я подтвердил это на http://www.jsonlint.com/ и http://jsonformatter.curiousconcept.com/.

Они покажут вам ошибки в вашем объекте JSON.

Если вы посмотрите на документы в http://json.org/, они показывают, что каждая строка должна быть в кавычках, кроме "строки". ваш пример не следует этому. У вас также есть запятая после вашего последнего объекта.

Вот как может выглядеть ваш настоящий JSON

{
    "Symptoms": {
        "label": "Symptoms",
        "data": [[1988, 10], [1989, 20], [1990, 10], [1991, 30], [1992, 40]]
    },        
    "Reactions": {
        "label": "Reactions",
                    "data": [[1988, 0], [1989, 0], [1990, 10], [1991, 30], [1992, 40]]

    },
    "Injections": {
        "label": "Injections",
                    "data": [[1988, 0], [1989, 0], [1990, 0], [1991, 30], [1992, 40]]

    }

}

Теперь, если вы хотите анализировать или создавать json-объекты и массивы в Android, есть четыре удобных класса, которые очень полезны.

Вы можете использовать их для выполнения любых манипуляций с реальными объектами JSON. Они всегда будут следовать рекомендациям JSON.

Чтобы получить метку в вашем примере, вы должны использовать JSONObject.getString ("label") на вашем объекте json.

Вот другой пример.

1 голос
/ 18 декабря 2010

Взгляните на Gson. Имеются собственные сериализаторы и десериализаторы Руководство пользователя Gson

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...