为什么我从这个 JSON 对象中得到 'undefined'?

Why am i getting 'undefined' from this JSON object?

var action=component.get("c.callCostCatalog");
        
action.setParams({ wrapperStructure:JSON.stringify(component.get("v.listStructurePV")),
              consumoTotal:component.get("v.consumTotal"), 
              Rate:'Vacia',
              orderItemID: component.get("v.recordId"),
              PMPInicial:component.get("v.precioInicial")})

action.setCallback(this,function(response){
//var listWrapper = JSON.parse(response.getReturnValue()); -> log shows [object object]
var listWrapper = JSON.parse(JSON.stringify(response.getReturnValue()));
//listWrapper.usedBand returns undefined
})

callCostCatalog 是一种 Apex 方法,其中 returns 字符串:

{"usedBand":0.0,"PMPObjetivo":0.0,"PMPNegotiated":0.028533,"PMPInit":0.028533,"negotiationBands":null,"Negotiation":0.0,"negBandCI":null,"minBandSD":null,"minBandRZ":null,"minBandRT":null,"minBandD":null,"minBand":null,"maxBandSD":null,"maxBandRZ":null,"maxBandRT":null,"maxBandD":null,"maxBand":null,"lNegotiatedPrices":[80.97],"lInitPrices":[0.028533],"lImplicitPrice":[],"lConsums":[]}

你的JSON.parse是对的,你的console.log是对的,你的JSON是对的

但是,您错误地调用了 JSON.stringify,这类似于 parse 的反向操作,获取一个 JavaScript 对象并生成一个字符串 JSON。你不想要那个;你已经有了 JSON 的字符串。只需将其删除。

var aux = '{"usedBand":0.0,"PMPObjetivo":0.0,"PMPNegotiated":0.028533,"PMPInit":0.028533,"negotiationBands":null,"Negotiation":0.0,"negBandCI":null,"minBandSD":null,"minBandRZ":null,"minBandRT":null,"minBandD":null,"minBand":null,"maxBandSD":null,"maxBandRZ":null,"maxBandRT":null,"maxBandD":null,"maxBand":null,"lNegotiatedPrices":[80.97],"lInitPrices":[0.028533],"lImplicitPrice":[],"lConsums":[]}';

它开始是代表一个对象的 JSON 字符串。


JSON.stringify(aux)

然后你把它变成一个JSON的字符串(表示一个JSON的字符串代表一个对象)。


JSON.parse(...);

然后你解析它,它给你返回 JSON 的原始字符串。


字符串没有 usedBand 属性。

您需要先解析您的原始 JSON 而不 将其 转换为 嵌套 JSON。

var aux = '{"usedBand":0.0,"PMPObjetivo":0.0,"PMPNegotiated":0.028533,"PMPInit":0.028533,"negotiationBands":null,"Negotiation":0.0,"negBandCI":null,"minBandSD":null,"minBandRZ":null,"minBandRT":null,"minBandD":null,"minBand":null,"maxBandSD":null,"maxBandRZ":null,"maxBandRT":null,"maxBandD":null,"maxBand":null,"lNegotiatedPrices":[80.97],"lInitPrices":[0.028533],"lImplicitPrice":[],"lConsums":[]}';

var aux2 = JSON.parse(aux);

console.log(aux2.usedBand);