динамически заполнять коллекцию ArrayCollection

Я пытаюсь заполнить ArrayCollection json data, чтобы использовать его как dataprovider для LineChart. Я попытался использовать следующий код, но это не сработало.

jsonData= (com.adobe.serialization.json.JSON.decode(dataLoader.data));

for (var i:int=0; i<10; i++){
        frame.addItem({ date_time:((jsonData[i].date_time).toString()) , glucose:((jsonData[i].content).glucose)}); }

Может кто-нибудь мне помочь? Спасибо.


person med yassine trabelsi    schedule 02.10.2016    source источник
comment
Что не работает? Что происходит такого, чего быть не должно? Не объяснять эти вещи с самого начала считается плохим качеством.   -  person Neal Davis    schedule 03.10.2016
comment
@NealDavis, Спасибо за ответ и извините за низкое качество. что не работает, так это то, что я не мог получить два объекта (date_time и gluosis) в ArrayCollection для динамического получения данных из массива json. он работает только в том случае, если данные статичны, но мне нужно, чтобы они динамически помещались в ArrayCollection, поскольку данные json всегда меняются.   -  person med yassine trabelsi    schedule 04.10.2016
comment
Можете ли вы опубликовать данные json, которые вы декодируете?   -  person Robin van den Bogaard    schedule 05.10.2016
comment
@RobinvandenBogaard, это та часть, которая мне нужна от объекта моего массива данных json. {content: {temp: 37, глюкоза: 135, систолическое: 98, диастолическое: 64, пульс: 68, id: 11011416}, micVerif: true, codr: 4/5, size: 95, date_time: 2016-09-15T19 : 41: 30.222228Z, ....},   -  person med yassine trabelsi    schedule 06.10.2016
comment
@RobinvandenBogaard, данные json получаются через URLLoader, что означает, что они всегда меняются, и я могу их легко прочитать. Однако я не мог заполнить им коллекцию ArrayCollection. поэтому я могу установить его в качестве провайдера данных для моей диаграммы, а затем установить его объекты для mychart.yfield = глюкоза и mychart.xfield = date_time, поэтому мне нужно заполнять его динамически. и да, этот объект json является массивом, а ... означает больше переменных, то, что я опубликовал ранее, является лишь небольшой частью объекта среди массива json.   -  person med yassine trabelsi    schedule 12.10.2016
comment
Хорошо, вы можете включить код линейного графика?   -  person Robin van den Bogaard    schedule 12.10.2016
comment
@RobinvandenBogaard, вот он: var localSeries: LineSeries = new LineSeries (); localSeries.dataProvider = frame; localSeries.yField = глюкоза; localSeries.xField = date_time; localSeries.displayName = Уровень глюкозы; var currentSeries: Array = myChart.series; currentSeries.push (localSeries); myChart.series = currentSeries; var hAxis: DateTimeAxis = новый DateTimeAxis (); hAxis.parseFunction = createDate; myChart.horizontalAxis = hAxis; }   -  person med yassine trabelsi    schedule 18.10.2016


Ответы (1)


Это тестовое приложение работает. Он использует урезанную версию ваших данных json. Но обрабатывает это так же. Я также использую другой декодер JSON.

Единственное, о чем я могу думать, это то, что ваша функция createDate неисправна. Я использовал простую версию, чтобы продемонстрировать, что все должно работать должным образом.

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.charts.DateTimeAxis;
            import mx.charts.series.LineSeries;
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            private var frame:ArrayCollection;

            protected function creationCompleteHandler(event:FlexEvent):void {
                frame = new ArrayCollection();

                var data:String = '[{ "content": { "glucose": 135 }, "date_time": "2016,09,15"},' +
                    '{ "content": { "glucose": 55 }, "date_time": "2016,09,16"},' +
                    '{ "content": { "glucose": 13 }, "date_time": "2016,09,17"},' +
                    '{ "content": { "glucose": 70 }, "date_time": "2016,09,18"}]';

                var jsonData:Object = JSON.parse(data);

                for each (var item:Object in jsonData) {
                    frame.addItem({ date_time:((item.date_time).toString()) , glucose:(item.content.glucose)});
                }

                var localSeries:LineSeries = new LineSeries(); 
                localSeries.dataProvider = frame; 
                localSeries.yField = "glucose"; 
                localSeries.xField = "date_time"; 
                localSeries.displayName = "Glucose Level"; 

                var currentSeries:Array = myChart.series; 
                currentSeries.push(localSeries); 
                myChart.series = currentSeries; 

                var hAxis:DateTimeAxis = new DateTimeAxis(); 
                hAxis.parseFunction = createDate; 
                myChart.horizontalAxis = hAxis;
            }

            public function createDate(s:String):Date {
                // Get an array of Strings from the 
                // comma-separated String passed in.
                var a:Array = s.split(",");

                // Trace out year, month, and day values.
                trace("y:" + a[0]);
                trace("m:" + a[1]);
                trace("d:" + a[2]);

                // To create a Date object, you pass "YYYY,MM,DD", 
                // where MM is zero-based, to the Date() constructor.
                var newDate:Date = new Date(a[0],a[1]-1,a[2]);
                return newDate;
            }

        ]]>
    </fx:Script>

    <mx:LineChart id="myChart" />

</s:WindowedApplication>
person Robin van den Bogaard    schedule 10.10.2016