首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类似于JSON的代码中捕获值

在类似于JSON的代码中捕获值
EN

Stack Overflow用户
提问于 2016-09-14 03:08:55
回答 1查看 138关注 0票数 0

我试图为一个游戏(维多利亚II)制作一个工具,保存游戏(整个保存游戏没有这种格式,只有我打算使用的部分,剩下的保存游戏现在没有任何重要性)维多利亚II有这样的格式:

代码语言:javascript
复制
 AAA = {
    B = {
        random_text = 1000.00
        another_one = 400.00
    }
    C= { 
        no_importance = 222
    }
    D = {
        random_text = 5.00
        another_one = 10.00
    }

 }

工具将如何工作?这个工具将计算AAA国家的GDP (有100个国家,首先我想计算AAA的GDP,但我要计算每一个国家的GDP)。每个国家的代码都是大写的三个字母),B参数是一些商品的国内生产(random_text和another_one),C参数不重要,所以工具会忽略它。D参数是一些商品的价格(在这种情况下,random_text和another_one,如果没有弄错,就有20种商品)。因此,工具(在JavaScript中)必须用每一种商品的价格乘以该国的商品生产,然后用每个国家的国内生产总值来编制一个表格。问题是:我如何才能用JavaScript做到这一点?我试图使用regexp,但我总是失败,代码捕获参数C并使工具失败。对于每一个国家,我想在表格中加上它的名字和它各自的国内生产总值。

注意:在上面的链接中,有更多关于工具工作的评论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-14 03:58:09

假设上面显示的格式是可靠的,您可以通过几次对.replace()的调用完成对JSON的快速和脏的转换,然后解析该JSON并根据需要处理结果对象。

我不知道你在说什么,但我想你的意思是,AAA的国内生产总值是每个B值乘以相应的D值的总和,即1000.00 * 5.00 + 400.00 * 10.00 = 9000。

代码语言:javascript
复制
var input = ' /* your input here */  ';

var json = '{'
         + input.replace(/([^\s]+)\s*=/g,'"$1":')
                .replace(/([^{\s])\n(\s*[^{}])/g,'$1,\n$2')
                .replace(/,(\s*})/g,'$1')
         + '}';

var obj = JSON.parse(json);

var output = Object.keys(obj).map(function(v) {
  return {
    country: v,
    gdp: Object.keys(obj[v].B).reduce(function(p, c) {
      return p + obj[v].B[c] * obj[v].D[c];
    }, 0)
  };
});

在运行上述操作之后,output变量将是一个具有这种格式的详细信息的对象数组:

代码语言:javascript
复制
[ { "country": "AAA", "gdp": 9000 }, //etc. ]

扩展以下内容并运行它,使其与三个国家一起工作:

代码语言:javascript
复制
var input = `AAA = {
    B = {
        random_text = 1000.00
        another_one = 400.00
    }
    C= { 
        no_importance = 222
    }
    D = {
        random_text = 5.00
        another_one = 10.00
    }
 }
 BBB = {
    B = {
        random_text = 111.00
        another_one = 222.00
    }
    C= { 
        no_importance = 222
    }
    D = {
        random_text = 3.00
        another_one = 4.00
    }
 }
 CCC = {
    B = {
        x = 10.0
        y = 20.0
        z = 30.0
    }
    C= { 
        no_importance = 222
    }
    D = {
        x = 1.00
        y = 2.00
        z = 3.00
    }
 }`;

var json = '{'
         + input.replace(/([^\s]+)\s*=/g,'"$1":')
                .replace(/([^{\s])\n(\s*[^{}])/g,'$1,\n$2')
                .replace(/,(\s*})/g,'$1')
         + '}';

var obj = JSON.parse(json);

var output = Object.keys(obj).map(function(v) {
  return {
    country: v,
    gdp: Object.keys(obj[v].B).reduce(function(p, c) {
      return p + obj[v].B[c] * obj[v].D[c];
    }, 0)
  };
});

console.log(output);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39481917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档