不用工具把json转换为map

/**
      *
      * @param jsonstring
      * @return
      */
     @SuppressWarnings ( "unchecked" )
     public static Object json2Map(String jsonstring){
     
         Stack<Map> maps= new Stack<Map>(); //用来表示多层的json对象
         Stack<List> lists= new Stack<List>(); //用来表示多层的list对象
         Stack<Boolean> islist= new Stack<Boolean>(); //判断是不是list
         Stack<String> keys= new Stack<String>(); //用来表示多层的key
         
         String keytmp= null ;
         Object valuetmp= null ;
         StringBuilder builder= new StringBuilder();
         char [] cs=jsonstring.toCharArray();
         
         for ( int i = 0 ; i < cs.length; i++) {
             
             switch (cs[i]) {
             case '{' : //如果是{map进栈
                 maps.push( new HashMap());
                 islist.push( false );
                 break ;
             case ':' : //如果是:表示这是一个属性建,key进栈
                 keys.push(builder.toString());
                 builder= new StringBuilder();
                 break ;
             case '[' :
                 islist.push( true );
                 lists.push( new ArrayList());
                 break ;
             case ',' : //这是一个分割,因为可能是简单地string的键值对,也有可能是string=map
             //的键值对,因此valuetmp 使用object类型;
             //如果valuetmp是null 应该是第一次,如果value不是空有可能是string,那是上一个键值对,需要重新赋值
             //还有可能是map对象,如果是map对象就不需要了
                
                 boolean listis=islist.peek();
                 
                 if (builder.length()> 0 )
                     valuetmp=builder.toString();
                 builder= new StringBuilder();
                 if (!listis){
                     keytmp=keys.pop();                 
                     maps.peek().put(keytmp, valuetmp);
                 } else
                     lists.peek().add(valuetmp);
                 
                 break ;
             case ']' :
                 islist.pop();
                 
                 if (builder.length()> 0 )
                     valuetmp=builder.toString();
                 builder= new StringBuilder();
                 lists.peek().add(valuetmp);
                 valuetmp=lists.pop();
                 break ;
             case '}' :
                 islist.pop();
                 //这里做的和,做的差不多,只是需要把valuetmp=maps.pop();把map弹出栈
                 keytmp=keys.pop();
                 
                 if (builder.length()> 0 )
                     valuetmp=builder.toString();
             
                 builder= new StringBuilder();
                 maps.peek().put(keytmp, valuetmp);
                 valuetmp=maps.pop();
                 break ;
             default :               
                 builder.append(cs[i]);
                 break ;
             }
             
         }      
         return valuetmp;
     }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MapReduce中将JSON转换为CSV格式,可以按照以下步骤操作: 1. 首先,您需要编写一个Mapper程序来解析JSON数据并将其转换为CSV格式。您可以使用一些JSON解析库,如Jackson或Gson。 2. 接下来,您需要编写一个Reducer程序来将Mapper输出的CSV数据合并并写入输出文件。 3. 在IDEA中,您可以创建一个Maven项目,并在pom.xml文件中添加所需的依赖项。 4. 编写Mapper程序和Reducer程序,并将它们添加到项目中的src/main/java目录下。 5. 在Mapper程序中,您需要编写一个map函数来解析JSON数据并将其转换为CSV格式。例如: ``` public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(value.toString()); String csv = node.get("field1").asText() + "," + node.get("field2").asText() + "," + node.get("field3").asText(); context.write(new Text(csv), NullWritable.get()); } ``` 6. 在Reducer程序中,您需要编写一个reduce函数来合并Mapper输出的CSV数据并将其写入输出文件。例如: ``` public void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException { context.write(key, NullWritable.get()); } ``` 7. 最后,您需要运行MapReduce作业并指定输入和输出路径。您可以使用IDEA中的Hadoop插件或命令行工具来运行作业。 希望这些步骤能够对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值