转换的ColdFusion JSON为结构(Convert coldfusion json to s

2019-08-19 03:55发布

我有一个jQuery应用程序使可变输出JSON:

[{"id":1},
{"id":197,"children":[{"id":198},{"id":199},{"id":200}]},
{"id":2,"children":[{"id":3},{"id":4},{"id":143},{"id":6},{"id":5},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12}]},
{"id":15,"children":[{"id":17},{"id":190},{"id":191},{"id":131},{"id":16},{"id":142},{"id":124}]},
{"id":149,"children":[{"id":150},{"id":160},{"id":161},{"id":184}]},
{"id":20,"children":[{"id":132},{"id":127},{"id":152},{"id":107},{"id":108},{"id":109},{"id":110},{"id":125},{"id":128},{"id":130},{"id":129},{"id":112}]},
{"id":162,"children":[{"id":163},{"id":164},{"id":165},{"id":166},{"id":186},{"id":187}]},
{"id":167,"children":[{"id":173},{"id":168},{"id":170},{"id":169},{"id":192},{"id":194}]},
{"id":174,"children":[{"id":176},{"id":175},{"id":188}]},
{"id":153,"children":[{"id":178},{"id":179},{"id":195},{"id":154},{"id":157}]},
{"id":180,"children":[{"id":181},{"id":182},{"id":183},{"id":189}]},
{"id":122},
{"id":21},
{"id":13},
{"id":92},
{"id":22},
{"id":113},
{"id":114}]

我需要这个变量的结构由前转换为结构,然后循环id参数,找到每个孩子id (如果有的话)。 我试图将它转换为像这样,但我得到一个错误的结构:

<cfset jsonarray = deserializeJson(output)>
<cfloop collection="#jsonarray#" index="id">
<cfdump var="#jsonarray[id]#">
</cfloop>

它不承认的变量的结构:

Invalid collection [{id={1}}, {children={[{id={198}}, {id={199}}, {id={200}}]},id={197}}, {children={[{id={3}}, {id={143}}, {id={4}}, {id={6}}, {id={5}}, {id={7}}, {id={8}}, {id={9}}, {id={10}}, {id={11}}, {id={12}}]},id={2}}, {children={[{id={17}}, {id={190}}, {id={191}}, {id={131}}, {id={16}}, {id={142}}, {id={124}}]},id={15}}, {children={[{id={150}}, {id={160}}, {id={161}}, {id={184}}]},id={149}}, {children={[{id={132}}, {id={127}}, {id={152}}, {id={107}}, {id={108}}, {id={109}}, {id={110}}, {id={125}}, {id={128}}, {id={130}}, {id={129}}, {id={112}}]},id={20}}, {children={[{id={163}}, {id={164}}, {id={165}}, {id={166}}, {id={186}}, {id={187}}]},id={162}}, {children={[{id={173}}, {id={168}}, {id={170}}, {id={169}}, {id={192}}, {id={194}}]},id={167}}, {children={[{id={176}}, {id={175}}, {id={188}}]},id={174}}, {children={[{id={178}}, {id={179}}, {id={195}}, {id={154}}, {id={157}}]},id={153}}, {children={[{id={181}}, {id={182}}, {id={183}}, {id={189}}]},id={180}}, {id={122}}, {id={21}}, {id={13}}, {id={92}}, {id={22}}, {id={113.... Must be a valid structure or COM object. 

Answer 1:

在JSON中, []表示的阵列和{}的结构(或对象)。 所以,你的输入实际上是结构的数组。 您需要使用一个array循环,而不是一个集合循环:

<cfset arrayOfStructs = deserializeJson(output)>
<cfloop array="#arrayOfStructs#" index="parent">
      <cfset parentID = parent.id />
      ... 
</cfloop>

children也是结构的阵列。 里面的外环,检查该密钥的存在。 如果找到,遍历数组孩子,做与每个ID的东西:

  <cfif structKeyExists(parent, "children")>
      <cfloop array="#parent.children#" index="child">
          ...
      </cfloop>
  </cfif>


Answer 2:

整洁的CFSCRIPT版本。 :)

<cfscript>
    structObj = deserializeJson(jsonString);

    for(i = 1; i LTE ArrayLen(structObj); i++){

        WriteOutput("parent id : " & structObj[i].id & "<br>"); 
        if(StructKeyExists(structObj[i], "children")){
            for(j = 1; j LTE ArrayLen(structObj[i].children); j++){
                WriteOutput("    -children id : " & structObj[i].children[j].id & "<br>");
            }
        }
    }
</cfscript>


Answer 3:

我创建了一个角1.4的ColdFusion 9 JSON正规化这里

 var myURL = 'myCfc.cfc?method=getItemsFromDb';
 var app = angular.module('angularOutput',[]);
 app.controller("sectionController", function($scope, $http) {
      $http.get(myURL).
        success(function(data, status, headers, config) {
          var log = []; 
          var output = '';
          angular.forEach(data.DATA, function(value, key) {
                    this.push(output +='{"value": ');
                    this.push(output += '"'+value[0]+'"');
                    this.push(output +=',"text":');
                    this.push(output += '"'+value[1]+'"');
                    this.push(output +='}');
                    this.push(output +=',');
                }, log);
              output = output.replace(/,\s*$/, "");/*had to remove the final comma */
              output = '['+output+']'; /*had to add the [] to corectally form the output*/

          $scope.sections = angular.fromJson(output);
        }).
        error(function(data, status, headers, config) {
          console.log(data);
        });
    });


文章来源: Convert coldfusion json to struct