当前位置: 首页 > 知识库问答 >
问题:

Regex模式删除json数组中的方括号和逗号,以便应用MapReduce

曹新觉
2023-03-14

好的,我基本上有这样一个JSON数组:

[
  {
    product:something, 
    version:something
  },
  {
    product: something,
    version: something
  }
]

我需要删除每个json之间的逗号,就像在花括号后面的逗号一样,我也需要删除方括号。这是必要的,因为我正在逐个反序列化元素,所以如果我有一个逗号或括号,它会给我一个错误,或者在我看来是这样。

无论如何,我一直在尝试创建一个正则表达式模式来替换这些元素。例如,我们假设读取的第一个json是这样的字符串:

[ 
 {
  product:something,
  version:something
 },

所以我的模式是:[\[\]/}(?=,)]但是,它匹配json中的最后一个括号和所有逗号,这不是我需要的。

有人能帮帮我吗?至少能给我介绍一些教程什么的?

编辑:我不能使用任何反序列化器或类似的任何东西,基本上我是将json数组的每个元素读取为一行,由"}"分隔。

共有1个答案

国跃
2023-03-14

找到了这样做的方法,其中我不需要涉及任何正则表达式或对JSON的更改。不管怎样,事情是这样的:

先到这里https://gist.github.com/Lupus/9988093,获取您正在使用的API的完整文件输入格式。最后,以下是我如何在我的一个映射器中实现它的示例

package mapreduce;


import java.io.IOException;

import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Mapper;
import org.json.*;

public class CommonErrorsMapper extends Mapper<NullWritable, BytesWritable, TextTriplet, IntWritable> {


         public void map(NullWritable key, BytesWritable value, Context context) throws IOException, InterruptedException{
            String product;
            String version;
            String errorCode;

            String json = new String(value.getBytes());
            try {
                JSONArray jObject = new JSONArray(json);
                for(int i = 0; i < jObject.length(); i++){
                    product = jObject.getJSONObject(i).getString("product");
                    version = jObject.getJSONObject(i).getString("version");
                    errorCode = jObject.getJSONObject(i).getString("errorCode");
                    context.write(new TextTriplet(product, version, errorCode), new IntWritable(1));
                }
            }catch(Exception error){
                error.printStackTrace();
            }
        }
}

把这个放在这里,因为我发现mapreduce非常难理解,在使用JSON这样的格式时更是如此。所以不管怎样,这似乎就是它的全部,除非是其他人找到了一种不用阅读整个文件的方法。

 类似资料:
  • 我试图创建一个数据数组与FLOT图表一起使用。我使用这个CodeIgniter代码来生成数组: 这段代码的问题是无法绘制生成的JSON对象,因为“值”实际上是字符串。以下是有问题的JSON输出: 这个JSON有三个问题: 需要方括号而不是花括号;和 以下是JSON输出的格式: 清理这个JSON对象的最佳方法是什么?我应该在服务器端使用CodeIgniter代码吗?或者我应该在javascript中

  • 问题内容: 我有一个像下面这样的json字符串 我想从字符串中删除/删除第一个和最后一个方括号。所以我将如何使用JavaScript从上述字符串中删除第一个和最后一个方括号。 请帮我 问题答案: 请参阅此Codepen示例

  • 我试图匹配,使用正则表达式,所有逗号(后跟一个空格):在任何括号或方括号之外,即逗号不应该包含在括号或方括号中。 目标字符串是。在这种情况下,它应该匹配第一个逗号和最后一个逗号(介于和之间,和)。 所以我可以拆分分成,and,不会因此而使括号/括号不平衡。 为此,似乎很难单独使用正则表达式。有没有其他办法解决这个问题? 我使用的正则表达式: 但是这个表达式将匹配另外两个不应该匹配的逗号(第二个和第

  • 例如,我希望使用函数将转换为: 空格的解决方案是,所以我希望比较这方面的解决方案也能帮助解释一些正则表达式的基本原理。

  • 问题内容: 尝试访问API时,必须像这样解析JSON数组 但是当我在做下面的代码 它返回不带方括号的json数组,如下所示 我已经花了数小时试图找出解决方法,却想不出解决方案 问题答案: 您需要将其他东西包装起来: 如果我们使用等效的PHP 5.4数组语法,这将更容易理解: 将此与JSON进行比较: 唯一要说明的是,为什么一个PHP数组保留为JSON 数组,而另两个数组转换为对象。但是文档已经这样

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。