【问题标题】:Generate the set of data into Json instead of one big mixed Json将数据集生成为 Json 而不是一个大的混合 Json
【发布时间】:2015-07-10 17:35:21
【问题描述】:

如何创建一个包含许多用逗号分隔的小数据集的 Json?

而不是用双花括号括起来的一个大Json?

我确实收到了一个 Json 并且使用 php 我确实使用 foreach 循环它,在里面进行了大量的数据处理。

然后生成一个新的Json,只是为了避免客户端的数据处理将由angularjs ng-repeat处理。

所有的 json 数据混合成一个大的 json 集(在双大括号内)

我的目标是分成几组数据。

我可以使用 NrType 属性。在此脚本中,NrType 接收最后一个属性,并且只有最后一个接收可用。

//The php script

    $arr = json_decode($returnedJson); //The original json to be pre-processed
    $processedData = "[]";
    $processedJson = json_decode($processedData,true);

    foreach($arr as $key=>$value) { 
        foreach($value as $vkey=>$vvalue) {             

            if( $value[$i]->NrType == 1 ) {

                $VlMIni     = $value[$i]->QttyInitial;
                $VlMSub     = $value[$i]->QttyPeriod + $value[$i]->QttyRealAfter;
                $VlMRec     = $value[$i]->RealValue;
                $VlMTotal   += $VlMesRece;
                //much more data processing going on here ...

            } elseif( $value[$i]->NrType == 2 ) { 

            .
            .
            .
            //and much more data processing going on here ...
        }
    }

    //simple data atribution here
    $processedJson['labelDesIni']       = 'Instruments';
    $processedJson['labelValueMIni']    = $lblVlMIni;   
    $processedJson['labelValuePIni']    = $lblVlPlIni; 
    $processedJson['labelValueAIni']    = $lblVlAIni;   
    $processedJson['labelValuePAIni']   = $lblVlPAIni;  
    $processedJson['labelValuePercInic']    = $lblVlPercInic;   
    $processedJson['labelValuePerc2Inic']   = $lblVlPerc2Inic; 

    //much more data atribution ...

    echo json_encode($processedJson); //the new hgenerated Json

生成的Json:

{
    labelDesI: "Inspection",
    labelValueMI: "2357",
    labelValuePlI: "3914066",
    labelValueAI: "1389406",
    labelValuePAI: "2431425",
    labelValuePercI: 57.143691456656,
    labelValuePerc2I: 35.497766261478,
    labelDesR: "Instruments",
    labelValueMR: "734.54",
    labelValuePR: "819.14",
    labelValueAR: "660.05",
    labelValuePAR: "877.94",
    labelValuePercR: 80.087,
    labelValuePerc2R: 44.739,
    labelDesAcfi: "Fiscalização",
    labelValueMAcfi: "343",
    labelValuePlAcfi: "29907",
    labelValueAAcfi: "16718",
    labelValuePAAcfi: "16493",
    labelValuePercAcfi: 101.36421512157,
    labelValuePerc2Acfi: 55.899956531916,
    labelDesT: "Totals",
    labelValueMT: 365.59,
    labelValuePlT: 547.62,
    labelValueAnT: 909.63,
    labelValuePAnT: 957.63,
    labelValuePercT: 22949,
    labelValuePerc2T: 25065
}

所需的格式是这样的:

{
    label: "Inspection",
    labelValue1: "2357",
    labelValue2: "3914066",
    labelValue3: "1389406",
    labelValue4: "2431425",
    labelValue5: 57.1456656,
    labelValue6: 35.4961478
},
{
    labelDesR: "Instruments",
    labelValue1: "734.54",
    labelValue2: "819.14",
    labelValue3: "660.05",
    labelValue4: "877.94",
    labelValue5: 80.087,
    labelValue6: 44.739
},
{
    labelDesT: "Totals",
    labelValue1: 365.59,
    labelValue2: 547.62,
    labelValue3: 909.63,
    labelValue4: 957.63,
    labelValue5: 22949,
    labelValue6: 25065
}

提前致谢

【问题讨论】:

    标签: php json angularjs


    【解决方案1】:

    分别生成所有对象,创建这些对象的数组并对数组进行 json_encode:

    $processedJsonElement[] = ['labelDesT' => "Totals", 'labelValue1' => $whatTheValueIs, . . .];
    

    并将其添加到您的主要对象:

    $processedJson[] = $processedJsonElement;
    

    对您想要表示的 Json 的每个部分执行此操作。不确定您是如何构建 Foreach 循环的,因为您的代码与输出不匹配,但无论您构建什么结构都是您在调用 json_encode 时将输出的任何内容。

    基本上,您需要构建您的 foreach 循环,以便能够划分您希望表示为 json 对象数组的对象。

    【讨论】:

    • 我尝试直接添加一个索引,如:$processedJson[11]['label1'] = $label1; 它会生成我需要的分隔部分谢谢@eggmaters
    • 更好。别客气。如果需要,您可以将其作为已接受的答案进行检查。
    • 谢谢!你的回答对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    相关资源
    最近更新 更多