为了提供一些背景信息,我正在使用adb logcat和idevicesyslog从android和ios设备读取设备日志。我需要的特定日志是swift / c#/ java / etc字典,通过adb logcat / idevicesyslog转换为字符串。我希望将这些包含JSON之类的日志(例如字符串)转换为有效JSON。这在大多数情况下都没问题。
但是,有时这些日志/字符串输出包含的字符(\ 134,\ M,\ t等)在解组为JSON时会引起问题。我将它们解组为JSON以将其发送到其他地方。
例如,原始设备日志可能具有以下内容: {“ foo”:“ bar”,“ foo”:“ bar \ 134 / \ 134 / bar \ 134 / bar \ 134 / bar”} {“ foo”:“ bar”,“ foo”:“ bar \ M / \ 134 / bar \ 134 / bar \ M / bar”}
当尝试解组时,这些结果会导致类似“错误:字符串转义码中的无效字符'M'”的错误
大多数日志不包含这些字符,因此这不是问题。但是,一些极端情况包含这些情况,这会造成问题。
这些类型的字符是否有合适的名称? (c#转义字符?)是否有golang软件包可以将其从字符串中删除?目前,我只是删除遇到的特定字符串(如果它们出现在字符串中),但是我觉得有更好的方法。将我遇到的字符添加到可删除字符列表中并不是一个好习惯。
总结一下,
idevicesyslog日志给了我这样的字符串: {“ foo”:“ bar”,“ foo”:“ bar \ 134 / \ 134 / bar \ 134 / bar \ 134 / bar”}
这不能被解组。
idevicesyslog日志给了我这样的字符串: {“ foo”:“ bar”,“ foo”:“ bar bar bar bar”}
这可以取消编组。
当前解决方案:将我遇到的新问题添加到列表中,并在拆封之前将其删除
有希望的解决方案:自动检测并删除
答案 0 :(得分:1)
使用正则表达式将无效的八进制转义序列替换为空格:
package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.GeneralPath;
import javax.swing.JComponent;
public class Triangle extends JComponent implements MouseListener{
private int x,y;
private Color c;
public Triangle(int x, int y, Color c)
{
this.x = x;
this.y = y;
this.c = c;
setPreferredSize(new Dimension(100, 100));
addMouseListener(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
GeneralPath path = new GeneralPath();
g2d.setColor(c);
path.moveTo(x, y);
path.lineTo(x, y);
path.lineTo(x+50, y);
path.lineTo(x, y-50);
path.closePath();
g2d.fill(path);
repaint();
}
public void draw(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
GeneralPath path = new GeneralPath();
g2d.setColor(c);
path.moveTo(x, y);
path.lineTo(x, y);
path.lineTo(x+50, y);
path.lineTo(x, y-50);
path.closePath();
g2d.fill(path);
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
c = Color.cyan;
repaint();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
您还可以解析八进制值并将其转换为有效的JSON转义序列:
var octalEscapePat = regexp.MustCompile(`\\[0-7]{3}`)
func fix(src string) string {
return octalEscapePat.ReplaceAllString(src, " ")
}
\ M的处理方式类似。