TypeError:不是有效的非字符串序列或映射对象

2024-10-01 09:42:18 发布

您现在位置:Python中文网/ 问答频道 /正文

TypeError:不是有效的非字符串序列或映射对象 •构建数据字典并使用dumps.json文件 •发布请求和数据

data = {
    "filter": "'{{Activity.Type}}'='Bounceback'",
    "name": "Bulk Activity Export - Bounceback",
    "fields": {
        "ActivityId": "{{Activity.Id}}"
   }
}

data = json.dumps(data)

print(request.post("/activities/exports", data = data ))

post请求方法(这不是完整的代码,只是执行post请求的部分)

^{pr2}$

结果:

身份验证没有问题。这是请求对象和http头。我得到TypeError:不是有效的非字符串序列或映射对象错误。在

data object: {"filter": "'{{Activity.Type}}'='Bounceback'", "fields": {"AssetType": "{{Activity.Asset.Type}}", "ActivityId": "{{Activity.Id}}", "EmailAddress": "{{Activity.Field(EmailAddress)}}", "AssetId": "{{Activity.Asset.Id}}", "ActivityDate": "{{Activity.CreatedAt}}", "AssetName": "{{Activity.Asset.Name}}", "CampaignId": "{{Activity.Campaign.Id}}", "ExternalId": "{{Activity.ExternalId}}", "ActivityType": "{{Activity.Type}}"}, "name": "Bulk Activity Export - Bounceback"}

页眉:

{'Content-Type': 'application/json', 'Authorization': 'Basic RmlhdE1hcmtldGluZ1xGMzIwMDJCOkFjY2V'}

Tags: 数据对象字符串idjsondatatype序列
2条回答

使用SwingWorkers(垃圾神建议的)是最好的解决方案。另一种选择是: 创建一个不加载映像的异步方法:

new Thread(new Runnable() {
    public void run() {
       //download the image
       BufferedImage image = ImageIO.read(url);
       //update the label
       updateLabel(image)
    }
}).start();

调用另一个方法来更新EDT中的标签

private void updateLabel(final BufferedImage image) {
  SwingUtilities.invokeLater(new Runnable() {
    public void run(){
      // fine updating here... event dispatch thread
      label.setIcon(new ImageIcon(image));
    }
  });
}

The image is only part of the HTML…calling setIcon is not an option.

一种方法是在^{}的背景中加载图像,将其临时保存到文件系统,并在<img/>标记中引用保存的文件。下面的变化,改编自这个example,是一个概念证明。您的实际实现可能使用SwingWorker<List<Row>, Row>,其中每个Row包含一个映像File;您的doInBackground()实现将publish()临时结果可用时;您对process()的实现将确保相关的树表呈现器为给定的Row看到正确的File

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

/**
 * @see http://stackoverflow.com/questions/4530659 */
public class WorkerTest extends JFrame {

    private JPanel panel = new JPanel();
    private JLabel label = new JLabel("Loading...");

    public WorkerTest() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        label.setHorizontalTextPosition(JLabel.CENTER);
        label.setVerticalTextPosition(JLabel.CENTER);
        this.add(label);
        this.pack();
        this.setLocationRelativeTo(null);
    }

    private void start() {
        new ImageWorker().execute();
    }

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                WorkerTest wt = new WorkerTest();
                wt.setVisible(true);
                wt.start();
            }
        });
    }

    class ImageWorker extends SwingWorker<File, Void> {

        private static final String TEST =
            "http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png";
        private BufferedImage image;
        private File file;

        @Override
        protected File doInBackground() throws IOException {
            image = ImageIO.read(new URL(TEST));
            file = File.createTempFile("image", null);
            ImageIO.write(image, "png", file);
            return file;
        }

        @Override
        protected void done() {
            label.setText("<html><body><img src=\"file://"
                + file.getAbsolutePath() + "\"/></body></html>");
            panel.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
            WorkerTest.this.pack();
            WorkerTest.this.setLocationRelativeTo(null);
        }
    }
}

相关问题 更多 >